前言:我是OCaml, OPAM和OASIS的新手。
tldr问题:我如何正确地设置一个在存储库中尚未可用的opam
包(我不能只做opam install X
)?详情如下:
我试图在OCaml项目中包含OCaml -glpk。我通过运行README中所述的make
和make install
来安装ocaml-glpk,并且给出的示例可以正确编译和运行。但是,我正在使用OASIS来生成项目的构建系统,我不确定如何设置它。我有相同的示例(在src
文件夹中重命名为glpkExample.ml
)和以下_oasis
文件:
Executable "glpkExample"
Path: src
MainIs: glpkExample.ml
CompiledObject: best
BuildDepends:
glpk
运行oasis setup -setup-update dynamic
后,我运行make
,得到以下错误:
ocaml setup.ml -build
Finished, 0 targets (0 cached) in 00:00:00.
+ /home/dimitrios/.opam/system/bin/ocamlfind ocamlopt -g -linkpkg -package glpk src/glpkExample.cmx -o src/glpkExample.native
File "_none_", line 1:
Error: Cannot find file /home/dimitrios/.opam/system/lib/glpk/glpk.cmxa
Command exited with code 2.
Compilation unsuccessful after building 4 targets (3 cached) in 00:00:00.
E: Failure("Command ''/usr/bin/ocamlbuild' src/glpkExample.native -tag debug' terminated with error code 10")
make: *** [build] Error 1
似乎glpk库缺少编译本机可执行文件所需的cmxa文件。我不知道如何解决这个问题。为了正确编译glpkExample.ml
,我的Makefile包括/home/dimitrios/.opam/system/lib/glpk
,还使用OCamlMakefile
,这是非常长和复杂的。如果您能帮助我在OASIS中设置这个,或者如何让ocaml-glpk在OASIS中很好地工作,我将不胜感激。
谢谢!
这个网站不适合bug报告。你真的应该在这里报告。
临时解决方案是使用CompiledObject: byte
以字节码进行编译。
如果您正在使用opam
,那么最好与它一起安装应用程序,而不是手动安装。尝试清理您的系统并删除您安装的任何内容,然后执行:
$ eval `opam config env`
$ opam install ocaml-glpk
之后,如果glpk
被正确地打包在opam
中,它应该与您的设置一起工作,即,仅与oasis
的BuildDepends
字段一起工作,而不是更多。