6

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

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

我将所有这些库包括在内,

flag ["ocaml"; "link"]
    (S (process "-cclib" clibs))

where适当地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

myocamlbuild.ml.in

 if @CC_NOASNEEDED@ then
     flag ["ocaml"; "link"]
         (S [A"-cclib";A"-Wl,--no-as-needed"]);
4

1 回答 1

4

这不是答案,而是一种解决方法 - 使用-cclib -Wl,--no-as-needed.

我想这应该作为一个错误报告给螳螂。具体来说,ocamlbuild应该保证flags 中的选项以与它们在源中遇到的顺序相同的顺序插入命令行(这是现在公平的情况),并且ocamlopt应该保留命令行上其他条目的顺序-cclib和参数-ccopt(现在不是这种情况)。

于 2011-11-29T13:16:43.553 回答