Я пытаюсь написать тест autoconf для библиотеки C ++. Я последовал за http://nerdland.net/2009/07/detecting-c-libraries-with-autotools/ . Мой чек выглядит так:
SAVED_LDFLAGS=$LDFLAGS
LDFLAGS="$LDFLAGS -lMyLib"AC_LINK_IFELSE(
[AC_LANG_PROGRAM([#include <mylibheader.hpp>],
[MyLibNamespace::SomeObject obj()])],
[TEST_LIBS="$TEST_LIBS -lMyLib"] [HAVE_MYLIB=1],
[AC_MSG_ERROR([libMyLib is not installed.])])
LDFLAGS=$SAVED_LDFLAGS
Тест не пройден. Если я проверяю config.log, то проблема, похоже, связана с сгенерированной командой компиляции, данной autoconf для проверки:
g++ -o conftest -g -O2 -lMyLib conftest.cpp
Как видите, параметры -l не в конце, после всех входных и выходных данных. Если я копирую&вставьте код conftest.cpp из config.log, с которым я могу его скомпилировать:
g++ -o conftest -g -O2 conftest.cpp -lMyLib
Как может autoconf быть не так? Как я могу это исправить?
Проблема в том, что вы добавляете -lMyLib
в LDFLAGS
вместо добавления к LIBS
, Другими словами, сделайте это вместо этого:
SAVED_LIBS=$LIBS
LIBS="-lMyLib $LIBS"AC_LINK_IFELSE(
[AC_LANG_PROGRAM([#include <mylibheader.hpp>],
[MyLibNamespace::SomeObject obj()])],
[TEST_LIBS="$TEST_LIBS -lMyLib"] [HAVE_MYLIB=1],
[AC_MSG_ERROR([libMyLib is not installed.])])
LIBS=$SAVED_LIBS
Редактировать: Порядок ссылок библиотек важен, поэтому я обновил LIBS=
строка для ссылки MyLib
до другие библиотеки, если таковые имеются, с предположением, что MyLib
может зависеть от других библиотек.
Других решений пока нет …