ocamlbuild中链接库的顺序

nlu*_*oni 6 linker ocaml ocamlbuild

我对将库添加到链接器的顺序存在问题.ocamlbuild以前构建的库链接在flag规则包含的库列表之后.而且,我也没有看到任何方法来定义这种类型的依赖myocamlbuild.ml.

具体来说,问题在于链接以前构建的库(gzcaml)需要库本身(z).由于较新版本的gcc增加了严格性,因此参数-lz必须出现在后面libgzcaml.a.

我包括所有这些库,

flag ["ocaml"; "link"]
    (S (process "-cclib" clibs))
Run Code Online (Sandbox Code Playgroud)

在哪里process创建一个交替库和A"-cclib"适当的列表.

此外,附加了额外的库(从详细输出,-lm-ldl),但我不知道如何修改/追加这些?(这会立即解决我的问题).

myocamlbuild.ml很长时间没把它包括在这里.我已经尝试将上面的代码移到底部After_rules,到顶部.它确实改变了顺序,但从未在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
Run Code Online (Sandbox Code Playgroud)

myocamlbuild.ml.in

 if @CC_NOASNEEDED@ then
     flag ["ocaml"; "link"]
         (S [A"-cclib";A"-Wl,--no-as-needed"]);
Run Code Online (Sandbox Code Playgroud)

ygr*_*rek 4

这不是答案,而是一种解决方法 - 使用 禁用这个新的链接器行为-cclib -Wl,--no-as-needed

我想这应该作为错误报告给螳螂。具体来说,ocamlbuild应该保证flags 中的选项按照在源中遇到的顺序插入到命令行中(现在就是这种情况),并且应该保留命令行上其他条目ocamlopt的顺序-cclib和参数-ccopt(现在情况并非如此)。