【问题标题】:Ocamlopt and missing crt2.o fileOcamlopt 和缺少 crt2.o 文件
【发布时间】:2012-03-09 08:35:15
【问题描述】:

在 Windows 7 64 位(自行安装程序)上安装了 OCaml,我尝试使用

创建一个简单的 exe 文件
ocamlopt HelloWorld.ml -o HelloWorld

根据需要,我将本机代码编译器 (ocamlopt) 与 Visual C++(我安装了 Visual Studio 10)和 Microsoft Assembler 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 文件所在的位置。我很欣赏答案可能很简单,但我被困住了。任何帮助将不胜感激。

【问题讨论】:

  • 我记得必须为 flexlink (FLEXLINKFLAGS) 设置全局标志才能正确通过它们。尽可能设置所有详细级别,例如 -cclib --verbose -ccopt -v 以查看正在运行的外部命令。很有帮助。

标签: ocaml ocamlbuild


【解决方案1】:

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

【讨论】:

  • 按照您的建议,我尝试使用 MinGW shell,并且能够使用标准命令以这种方式构建它 - 根本没有链接问题。现在将研究这里建议的所有其他选项,看看我是否可以通过 Windows shell 让它工作。非常感谢
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    我们清楚地了解您遇到的问题以及最终找到的解决方案非常重要,这样我们才能告诉维护人员如何更新相关文档。

    【讨论】:

      【解决方案4】:

      我编写了安装程序。

      所以为了解决这个问题,详细说明位于http://protz.github.com/ocaml-installer/,实际上您必须将正确的 FLEXLINKFLAGS 导出为环境变量,因为 ocamlopt 使用 flexlink(安装程序包)。但是,flexlink 本身不能在 msys 环境中开箱即用。

      安装程序的下一个版本将鼓励您使用 cygwin,一切都应该可以完美运行。

      干杯,

      乔纳森

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-04
        • 2016-10-21
        相关资源
        最近更新 更多