ライブラリがリンカーに追加される順序に問題があります。ocamlbuildによって以前に構築されたライブラリは、flag
ルールに含めたライブラリのリストの後にリンクされています。そして、私はどちらにもこのタイプの依存関係を定義する方法を見ていませんmyocamlbuild.ml
。
具体的には、問題はgzcaml
、ライブラリ自体()を必要とする以前に構築されたライブラリ()とのリンクにありz
ます。gccの新しいバージョンでは厳密性が追加されているため、引数は。の-lz
後に表示する必要がありますlibgzcaml.a
。
私はこれらすべてのライブラリをに含めています、
flag ["ocaml"; "link"]
(S (process "-cclib" clibs))
ここでprocess
、ライブラリとを交互にリストを作成しA"-cclib"
ます。
また、追加のライブラリが(詳細出力から-lm
)追加されますが-ldl
、これらを変更/追加する方法がわかりませんか?(これは私の問題を即座に解決します)。
私myocamlbuild.ml
はかなり長いです、そうでなければ私はそれをここに含めたでしょう。上記のコードをの下部、上部に移動してみましたAfter_rules
。また、順序は変更されますが、ocamlbuildが以前に作成したビルド済みライブラリ(cなど)の後には変更されません。
編集 以下は、上記の問題を解決するためにconfigureスクリプトと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"]);