Linker ocamlbuild中链接库的顺序
我对库添加到链接器的顺序有问题。以前由ocamlbuild构建的库链接到Linker ocamlbuild中链接库的顺序,linker,ocaml,ocamlbuild,Linker,Ocaml,Ocamlbuild,我对库添加到链接器的顺序有问题。以前由ocamlbuild构建的库链接到标记所包含的库列表之后。而且,我在myocamlbuild.ml中也看不到任何定义这种依赖关系的方法 具体来说,这个问题来自于与以前构建的库(gzcaml)的链接,该库本身需要一个库(z)。由于新版本的gcc增加了严格性,参数-lz必须出现在libgzcaml.a之后 我把所有这些图书馆都包括在内 flag ["ocaml"; "link"] (S (process "-cclib" clibs)) 其中proce
标记所包含的库列表之后。而且,我在myocamlbuild.ml
中也看不到任何定义这种依赖关系的方法
具体来说,这个问题来自于与以前构建的库(gzcaml
)的链接,该库本身需要一个库(z
)。由于新版本的gcc增加了严格性,参数-lz
必须出现在libgzcaml.a
之后
我把所有这些图书馆都包括在内
flag ["ocaml"; "link"]
(S (process "-cclib" clibs))
其中process
创建一个列表,适当地交替使用库和a“-cclib”
另外,附加了一些库(从详细输出,-lm
和-ldl
),但我不知道如何修改/附加这些库?(这会立即解决我的问题)
我的build.ml
相当长,否则我会把它包括在这里。我已尝试将上述代码移动到规则之后的底部,移动到顶部。它确实改变了顺序,但决不会在ocamlbuild先前创建的构建库(c或其他)之后
编辑
下面是我在配置脚本和ocamlbuild中用于解决上述问题的代码片段。干杯
在configure.ac中
oCFLAGS="$CFLAGS"
CFLAGS="$FLAGS -Wl,--no-as-needed"
AC_MSG_CHECKING([whether we need to add --no-as-needed linking option])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
[[
int main(){ return 0; }
]])],
[AC_MSG_RESULT([yes]); CC_NOASNEEDED="true"],
[AC_MSG_RESULT([no]); CC_NOASNEEDED="false"])
CFLAGS=$oCFLAGS
在build.ml.in
if @CC_NOASNEEDED@ then
flag ["ocaml"; "link"]
(S [A"-cclib";A"-Wl,--no-as-needed"]);
这不是一个答案,而是一个解决方法-根据需要使用-cclib-Wl,--no来禁用这个新的链接器行为
我想这应该作为一个虫子报告给螳螂。具体地说,ocamlbuild
应该保证来自flag
s的选项以在源代码中遇到的相同顺序插入命令行(现在是afair的情况),而ocamlopt
应该保留-cclib
和-ccopt
参数的顺序,而不是命令行上的其他条目(现在不是这种情况)。谢谢,这非常有效。对于其他有问题的人,只需确保这些标志位于所有库之前。