鏈接庫的我在與其中庫添加到鏈接器的順序問題。以前由ocamlbuild構建的庫鏈接在flag
規則包含的庫列表之後。而且,我也沒有看到在myocamlbuild.ml
中定義這種依賴關係的方法。秩序ocamlbuild
具體而言,問題出在與先前構建的庫(gzcaml
)鏈接,該庫需要庫本身(z
)。由於GCC的較新版本增加的嚴格的論證-lz
必須libgzcaml.a
後出現。
我,包括所有這些庫,
flag ["ocaml"; "link"]
(S (process "-cclib" clibs))
其中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 @[email protected] then
flag ["ocaml"; "link"]
(S [A"-cclib";A"-Wl,--no-as-needed"]);
謝謝你的工作很好。對於有問題的其他人,只要確保這些標誌位於所有庫之前。 – nlucaroni
http://caml.inria.fr/mantis/view.php?id=5441 – ygrek