在 debian bulleye 上编译 ocaml 项目时出现问题:对 shm_unlink 和 shm_open 的未定义引用

Problems compiling ocaml project on debian bulleye: undefined reference to shm_unlink and shm_open

正在尝试从

编译ocaml项目

https://gitlab.com/benjgregoire/maskverif/

我(对 ocaml 一无所知)在安装所有缺少的库后收到错误消息

+ ocamlfind ocamlopt -rectypes -cclib -lrt -linkpkg -g -thread -package zarith,unix,menhirLib,ocamlgraph -I src src/util.cmx src/expr.cmx src/pexpr.cmx src/poly.cmx src/poly_solve.cmx src/shrcnt.cmx src/state.cmx src/checker.cmx src/ilang_ast.cmx src/ilang_parser.cmx src/ilang_lexer.cmx src/parsetree.cmx src/prog.cmx src/ilang.cmx src/parser.cmx src/lexer.cmx src/main.cmx src/shrcnt_low.o -o src/main.native
/usr/bin/ld: src/shrcnt_low.o: in function `shrcnt_destroy':
/home/myname/work/maskverif/_build/src/shrcnt_low.c:74: undefined reference to `shm_unlink'
/usr/bin/ld: src/shrcnt_low.o: in function `shrcnt_create':
/home/myname/work/maskverif/_build/src/shrcnt_low.c:99: undefined reference to `shm_open'
/usr/bin/ld: /home/myname/work/maskverif/_build/src/shrcnt_low.c:95: undefined reference to `shm_unlink'

根据我在互联网上的发现,看起来库 rt 是通过 -lrt 在错误的位置提供给 gcc 链接器的,但我不知道如何解决这个问题,因为它被一些 ocaml 调用二进制。

我该如何解决这个问题?

this issue 中报告了同样的问题。

维护者的回复如下:

This issue was very tricky to fix. You can find the current fix on the SPINI branch.

因此,您可以尝试检查 SPINI 分支并尝试构建。


据我了解,问题是在 Makefile they can't properly pass the -lrt to the linker. In the SPINI branch, they switched 使用沙丘构建系统并解决了这个问题。

与此同时,我能够按照 jubnvz 在 his/her 答案中的建议编译 SPINI 分支。它无法使用 debian/bulleye 提供的 ocaml/opam/dune 软件包,但卸载所有 ocaml-related debian 软件包并按照 https://gitlab.com/benjgregoire/maskverif/tree/SPINI 的 README 中的安装说明进行操作对我来说效果很好。