user-interface module compilation ocaml gtk2

user interface - OCaml-Wodi Parte 2: compilar usando lo que se instaló



user-interface module (1)

Estoy tratando de compilar una viñeta muy pequeña para ver cómo funciona lablgtk2.

(* file: base.ml *) let main () = let window = GWindow.window () in window#show (); GMain.Main.main () let _ = main ()

Lo tengo instalado correctamente a través del administrador de paquetes wodi32 y revisé la carpeta pgk-lib para ver que hay archivos gMain.cmx / cmi y gWindow.cmx / cmi (así como los respectivos archivos .ml y .mli). Sin embargo, cuando ejecuto el siguiente comando de compilación:

$ ocamlc -I +lablgtk2 -o base lablgtk.cma gtkInit.cmo base.ml

Obtuve el siguiente error:

File "base.ml", line 4, characters 15-29: Error: Unbound module GWindow

¿Qué no es correcto? ¿Por qué no puede encontrar los módulos GMain y GWindow? ¿Existe una directiva de compilación de línea de comando alternativa que pueda usar que produzca un ejecutable (es decir, estilo de Windows / Linux)? Por ejemplo, ¿hay alguna forma de vincular directamente los módulos GMain y GWindow para que el compilador comprenda que no están desatados?

Curiosamente, cuando ejecuto el siguiente comando, las cosas parecen funcionar, pero solo producen un archivo de objeto (es decir, base.o, así como base.cmx, base.cmi):

$ ocamlfind opt -package lablgtk2 -linkpkg base.ml

¿Cómo convierto ese objeto en un ejecutable?


Utilice siempre ocamlfind como envoltorio para ocaml (c | opt), si usa las bibliotecas instaladas a través de ocamlfind (casi todas las bibliotecas ofrecen soporte de ocamlfind hoy en día). Solo ocamlfind puede analizar los archivos ''META'' de estas bibliotecas. Y ocamlfind puede instalar bibliotecas en diferentes ubicaciones (dependiendo de su findlib.conf y ciertas variables ambientales), ocaml simple posiblemente no las encuentre con la notación ''+ lib''.

Lo siguiente debería funcionar:

ocamlfind ocamlopt -package lablgtk2.auto-init -linkpkg base.ml -o myprog.exe ocamlfind ocamlc -package lablgtk2.auto-init -linkpkg base.ml -o myprog_byte.exe

''.auto-init'' agregará gtkInit por usted.