Ocamlopt不产生任何输出,仅产生错误代码

时间:2019-03-20 01:02:50

标签: c++ ocaml interop ffi

我正试图从OCaml调用一个庞大的C ++库,但是我遇到了ocamlopt的问题,该错误最终以错误代码2失败。

我正在通过建立一个C接口来完成整个舞蹈,我可以使它正常运行,但是一旦我引用了这个库,构建就会中断。

是否有某种方法可以知道到底是什么故障?我尝试了-verbose标志,但它仅显示命令行参数(相当长)。

关于如何调查像这样的无声故障,您有什么提示吗?

2 个答案:

答案 0 :(得分:2)

TL; DR;检查您是否有足够的内存和/或磁盘空间。

ocamlopt被信号杀死或耗尽内存(或两者都耗尽),检查dmesg输出,从内核中查找OOM消息,也使用{ {1}}了解有关内存占用的想法。

此外,由于这种情况是在您尝试与C ++库链接时发生的,因此很有可能是htop进程失败了(再次,很可能是OOM),例如{{1 }}使用系统链接器。

答案 1 :(得分:0)

万一其他人再次遇到这种情况:问题是构建驱动程序传递了过多的-ccopt-cclib自变量。当我开始包含具有许多其他依赖项的C ++库时,我们似乎已经达到了断点。

解决方案是更改构建驱动程序的OCaml编译器和链接器规则,以将所有编译器和链接器args写入文件,以便可以将它们全部作为单个-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