web-dev-qa-db-fra.com

"Erreur: module non lié" dans OCaml

Voici un exemple simple d'utilisation de la bibliothèque Cohttp:

open Lwt
open Cohttp
open Cohttp_lwt_unix

let body =
  Client.get (Uri.of_string "http://www.reddit.com/") >>= fun (resp, body) ->
  let code = resp |> Response.status |> Code.code_of_status in
  Printf.printf "Response code: %d\n" code;
  Printf.printf "Headers: %s\n" (resp |> Response.headers |> Header.to_string);
  body |> Cohttp_lwt.Body.to_string >|= fun body ->
  Printf.printf "Body of length: %d\n" (String.length body);
  body

let () =
  let body = Lwt_main.run body in
  print_endline ("Received body\n" ^ body)

J'essaye de le compiler

 ocaml my_test1.ml

Erreur:

Erreur: module non lié Lwt

Comment inclure/exiger réellement le module Lwt dans mon application?

mise à jour

Aussi:

$ ocamlbuild
bash: ocamlbuild: command not found

Mais:

$ opam install ocamlbuild
[NOTE] Package ocamlbuild is already installed (current version is
       0.12.0).

Et

$ opam install ocamlfind
[NOTE] Package ocamlfind is already installed (current version is
       1.7.3-1).

Et

$ ocamlfind
bash: ocamlfind: command not found

Où sont situés ocamlfind et ocamlbuild?

pdate2

$ ocamlfind ocamlc -package lwt -c my_test1.ml 
 File "my_test1.ml", line 2, characters 5-11:
 Error: Unbound module Cohttp
11
Loku

Vous avez plusieurs options selon vos besoins.

1) Si vous souhaitez créer un projet complet pour votre binaire, je vous recommande de regarder jbuilder . Voici un guide très sympa qui explique pas à pas la configuration environnement/projet: OCaml pour les impatients .

2) Une autre option consiste à compiler le binaire directement comme vous tentiez de le faire:

ocamlbuild -pkg lwt -pkg cohttp-lwt-unix my_test1.native

Notez que vous devez avoir un fichier nommé my_test1.ml Pour générer le my_test1.native Demandé.

3) Et enfin pour les scripts rapides, je trouve pratique de pouvoir demander à l'interpréteur OCaml de charger les dépendances directement dans le fichier source. Ajoutez simplement ce qui suit au début de votre fichier:

#use "topfind";;
#require "lwt";;
#require "cohttp-lwt-unix";;

Et puis exécutez ocaml my_test1.ml.


J'espère que cela t'aides! :)

En regardant également les erreurs command not found Que vous obtenez, je peux suggérer que votre environnement est correctement configuré. Le livre OCaml Real World a une page wiki pour cela: https://github.com/realworldocaml/book/wiki/Installation-Instructions

8
Rizo