У меня проблема с порядком, в котором библиотеки добавляются в компоновщик.Ранее созданные библиотеки 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
вверх.И это меняет порядок, но никогда после встроенных библиотек (c и других), которые ocamlbuild создал ранее.
EDIT Ниже приведены фрагменты кода, которые я использовал в моей конфигурациискрипт и 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"]);