Порядок подключаемых библиотек в ocamlbuild
у меня проблема с порядком добавления библиотек в компоновщик. Ранее построенные библиотеки 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 создал ранее.
редактировать Ниже приведены фрагменты кода, которые я использовал в своем скрипте 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"]);
1 ответов
это не ответ, а обходной путь-отключить это новое поведение компоновщика с -cclib -Wl,--no-as-needed
.
Я думаю, это должно быть сообщено как о баге на богомола. В частности, ocamlbuild
должен гарантировать, что опции из flag
s вставляются в командную строку в том же порядке, в каком они встречаются в источнике (это имеет место сейчас afair), и ocamlopt
следует сохранить порядок -cclib
и -ccopt
аргументы wrt другие записи в командной строке (это не так теперь.)