Порядок линкованных библиотек в 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 создал ранее.


EDIT. Ниже приведены фрагменты кода, которые я использовал в скрипте 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"]);
6
задан nlucaroni 14 December 2011 в 17:00
поделиться