Ocamlopt 不产生任何输出,只有一个错误代码

Ocamlopt doesn’t produce any output, only an error code

我正在尝试从 OCaml 调用一个庞大的 C++ 库,但我在使用 ocamlopt 时遇到了问题,它突然失败并显示错误代码 2。

我正在搭建一个 C 界面,我可以让它正常工作,但是一旦我引用这个库,构建就会中断。

有什么方法可以知道到底是什么失败了?我尝试了 -verbose 标志,但它只打印命令行参数(很长)。

关于如何调查此类静默故障,您有什么建议吗?

TL;DR;检查您是否有足够的内存 and/or 磁盘 space.

ocamlopt 被信号杀死或耗尽内存(或两者)时,可能会发生这样的事情,检查 dmesg 输出,查找来自内核的 OOM 消息,也使用 htop 了解内存占用情况。

此外,由于当您尝试 link 使用 C++ 库时会发生这种情况,因此很可能是 ld 进程失败(同样,很可能是 OOM ),因为 ocamlopt 使用系统 linker。

以防其他人再次遇到此问题:问题是构建驱动程序传入了太多 -ccopt-cclib 参数。当我开始包含一个带有许多其他依赖项的 C++ 库时,我们似乎已经达到了临界点。

解决方案是更改构建驱动程序的 OCaml 编译器和链接器规则,将所有编译器和链接器参数写入文件,这样它们就可以作为单个 -ccopt @<compiler.args>-cclib @<linker.args> 参数传入. gccld support the @file command line option.

GitHub 问题:ocamlopt lets the compiler/linker silently fail if too many -ccopt or -cclib arguments are passed in