Порядок подключаемых библиотек в 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 должен гарантировать, что опции из flags вставляются в командную строку в том же порядке, в каком они встречаются в источнике (это имеет место сейчас afair), и ocamlopt следует сохранить порядок -cclib и -ccopt аргументы wrt другие записи в командной строке (это не так теперь.)