Ocamlopt和缺失的crt2.o文件

4
在Windows 7 64位系统上安装好OCaml(自己安装程序),我尝试创建一个简单的exe文件。
ocamlopt HelloWorld.ml -o HelloWorld

根据要求,我使用了原生代码编译器(ocamlopt)和Visual C++ (我安装了Visual Studio 10),以及Microsoft汇编程序MASM版本8(MinGW也已安装)。我还设置了OCaml(c:\ProgramFiles\Ocaml\bin)、MinGW(c:\ProgramFiles\MinGW\bin)和MASM(C:\masm32\bin)的路径变量。然而,尽管我已经尽力并进行了大量搜索,但仍无法解决错误信息。

**Fatal error, Cannot find file "crt2.o"
File "caml_startup", line 1, characters 0-1:
Error: error during linking.

除非我将HelloWorld.ml文件放在MinGW的lib文件夹中,即crt2.o文件所在的位置,否则无法正常运行。我知道这个问题可能很简单,但我卡住了。非常感谢任何帮助。

1
我记得必须设置flexlink的全局标志(FLEXLINKFLAGS)才能使所有内容正确传递。尽可能设置所有详细级别,例如-cclib --verbose -ccopt -v,以查看正在运行的外部命令。非常有帮助。 - nlucaroni
4个回答

2

我猜想mingw需要一些方法来查找库文件 - 当它从源代码编译时 - 库的路径在二进制文件中是硬编码的,如果没有 - 它会以某种方式搜索(环境变量)。尝试从mingw(或msys)shell构建,这可能提供正确的环境或手动设置LIB环境变量。顺便说一句,在调试mingw问题时,首先排除ocaml并尝试先构建简单的C程序会更容易。


我按照你的建议尝试使用MinGW shell,并成功地使用标准命令构建了它,没有任何链接问题。现在将研究这里提到的所有其他选项,以查看是否可以通过Windows shell使其工作。非常感谢。 - user1060986

2

我记得这是一个已知的bug:与文档中所说的相反,您还需要安装Cygwin。

另一个问题可能是32/64位不兼容,即您的某些工具使用32位目标,而其他工具使用64位目标。


1

你能否更明确地说明你使用了哪个OCaml安装程序(URL?)。你是否尝试过this page上提供的安装程序?它列出了几个潜在问题以及如何设置MinGW/MSYS进行本地编译。

非常重要的是,我们清楚地了解你遇到的问题和可能找到的解决方案,以便我们告诉维护者如何更新相关文档。


1

我写了安装程序。

为了解决这个问题,详细的说明在http://protz.github.com/ocaml-installer/,确实需要将正确的FLEXLINKFLAGS导出为环境变量,因为ocamlopt使用flexlink(安装程序打包了它)。然而,在msys环境中,flexlink本身并不能直接使用。

下一个版本的安装程序将鼓励您使用cygwin,那里一切都应该完美无缺。

祝好,

乔纳森


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接