Linker 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

我对库添加到链接器的顺序有问题。以前由ocamlbuild构建的库链接到
标记所包含的库列表之后。而且,我在
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
参数的顺序,而不是命令行上的其他条目(现在不是这种情况)。

谢谢,这非常有效。对于其他有问题的人,只需确保这些标志位于所有库之前。