Порядок связанных библиотек в ocamlbuild - PullRequest
6 голосов
/ 28 ноября 2011

У меня проблема с порядком, в котором библиотеки добавляются в компоновщик.Ранее созданные библиотеки 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"]);

1 Ответ

4 голосов
/ 29 ноября 2011

Это не ответ, а обходной путь - отключите это новое поведение компоновщика с помощью -cclib -Wl,--no-as-needed.

Полагаю, об этом следует сообщить об ошибке богомолу. В частности, ocamlbuild должен гарантировать, что опции из flag s будут вставлены в командную строку в том же порядке, в каком они встречаются в источнике (это имеет место сейчас), а ocamlopt должен сохранить порядок -cclib и -ccopt аргументы относительно других записей в командной строке (сейчас это НЕ так).

...