我正试图从OCaml调用一个庞大的C ++库,但是我遇到了ocamlopt的问题,该错误最终以错误代码2失败。
我正在通过建立一个C接口来完成整个舞蹈,我可以使它正常运行,但是一旦我引用了这个库,构建就会中断。
是否有某种方法可以知道到底是什么故障?我尝试了-verbose标志,但它仅显示命令行参数(相当长)。
关于如何调查像这样的无声故障,您有什么提示吗?
答案 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>
参数传递。 gcc
和ld
support the @file
command line option。
GitHub问题:ocamlopt lets the compiler/linker silently fail if too many -ccopt or -cclib arguments are passed in