OCamlbuild和构建本机动态链接库

OCamlbuild和构建本机动态链接库,ocaml,ocamlbuild,Ocaml,Ocamlbuild,我发布了一个没有人回复的帖子,我希望这里的人可以称我为白痴,确认情况,或者提供一个创造性的解决方案 当通过ocamlbuild构建动态库时,我被卡在了最后一条链接线上 /opt/ocaml-3.12.1/bin/ocamlopt.opt -shared -verbose -cc gcc plugins/example.cmx -o plugins/example.cmxs -ccopt -v + as -o 'plugins/example.cmxs.startup.o' '/tmp/camls

我发布了一个没有人回复的帖子,我希望这里的人可以称我为白痴,确认情况,或者提供一个创造性的解决方案

当通过
ocamlbuild
构建动态库时,我被卡在了最后一条链接线上

/opt/ocaml-3.12.1/bin/ocamlopt.opt -shared -verbose -cc gcc plugins/example.cmx -o plugins/example.cmxs -ccopt -v
+ as -o 'plugins/example.cmxs.startup.o' '/tmp/camlstartupe6993f.s'
+ gcc -o 'plugins/example.cmxs'   '-L/opt/ocaml-3.12.1/lib/ocaml' -v 'plugins/example.cmxs.startup.o' 'plugins/example.o'
这会产生类似于的错误。当我删除
-cc
选项并且
-shared
标志传递给
gcc
时,此错误已修复

/opt/ocaml-3.12.1/bin/ocamlopt.opt -shared -verbose plugins/example.cmx -o plugins/example.cmxs -ccopt -v
+ as -o 'plugins/example.cmxs.startup.o' '/tmp/camlstartup2c31a2.s'
+ gcc -shared -o 'plugins/example.cmxs'   '-L/opt/ocaml-3.12.1/lib/ocaml' -v 'plugins/example.cmxs.startup.o' 'plugins/example.o'
OCamlbuild将
-cc
选项传递给所有内容,因此删除它不是一个选项。似乎是ocamlopt中的一个bug;有没有人经历过类似的情况?我是吗 在编译中缺少任何内容或选项

谢谢


编辑

我的解决方案就是通过myocamlbuild.ml中的标志传递选项

flag ["shared"; "link"]
    (S [A"-ccopt";A"-shared"]);
不能在这里复制

Ocamlbuild本身没有通过-cc选项(为什么要通过?),我在源代码中也找不到这种行为。因此,它可能是通过插件传递的,这是错误的,因为ocamlopt在配置时确定了共享库的链接器(通常是
gcc-shared
),但是如果明确指定了
-cc
选项,它将很乐意使用它


NB option
-shared
不会“传递”给ocamlopt,而是启用链接动态插件,这会导致为共享库选择特殊的C链接器(恰好是具有相同命名选项的gcc)。指定
-cc
将覆盖它作为一个整体。

是的,它会传递给我的插件,但这是必需的。传递-ccopt/-cclib w/-shared将修复该问题。我猜在选择cc时,共享选项可能在该编译器上不可用。看起来我可以用ocamlbuild管理一些东西。谢谢,我不明白。您应该在构建CMX时通过-cc
somecc-shared
,或者根本不通过-cc。