Ocaml绑定的测试(如果你已经安装了Ocaml的LLVM会自动安装)都会在cygwin下失败,当我尝试创建最简单的程序时,我得到的错误都是所有内置的-in测试失败:
> ocamlopt -I +llvm-2.8 -cc g++ llvm.cmxa llvm_bitwriter.cmxa llvm_trivial.ml -o llvm_trivial
/usr/lib/ocaml/libasmrun.a(unix.o):unix.c:(.text+0x14a): undefined reference to `_flexdll_dlerror'
/usr/lib/ocaml/libasmrun.a(unix.o):unix.c:(.text+0x177): undefined reference to `_flexdll_dlopen'
/usr/lib/ocaml/libasmrun.a(unix.o):unix.c:(.text+0x193): undefined reference to `_flexdll_dlopen'
/usr/lib/ocaml/libasmrun.a(unix.o):unix.c:(.text+0x1a2): undefined reference to `_flexdll_dlsym'
/usr/lib/ocaml/libasmrun.a(unix.o):unix.c:(.text+0x1bc): undefined reference to `_flexdll_dlsym'
/usr/lib/ocaml/libasmrun.a(unix.o):unix.c:(.text+0x1cf): undefined reference to `_flexdll_dlclose'
collect2: ld returned 1 exit status
File "caml_startup", line 1, characters 0-1:
Error: Error during linking
谷歌搜索表示this isn't LLVM specific,其他人有同样的问题,但我找不到解决方案。我安装了flexdll。我没有正确引用它吗?
这对我的Linux系统起作用,所以我觉得这对我在cygwin上做的事情是特别的。有什么建议吗?
答案 0 :(得分:1)
flexlink在链接期间由ocamlopt调用,使用-verbose选项运行以查看它是如何被调用的以及缺少的内容。 -cc g++
选项看起来特别可疑,因为它可能会丢弃flexlink并使用g ++作为链接器,这当然找不到flexdll符号(引自flexlink-aware ocamlopt生成的ocaml代码)。
答案 1 :(得分:0)
我不知道ocaml,但看起来你必须使用 flexlink 。
缺少的定义位于.o
中的/usr/lib/flexdll/
文件中,并且有一个名为/bin/flexlink
的特殊链接器。
http://alain.frisch.fr/flexdll.html提倡这一点:
flexlink -chain cygwin -exe -o dump.exe dump.o
linux在运行时解析缺少的符号,因此linux不是一个好的衡量标准。