Непоследовательные результаты от AC_CHECK_FUNCS - PullRequest
3 голосов
/ 20 января 2011

У меня проблема со скриптом настройки, проверяющим наличие некоторых основных функций,

AC_CHECK_FUNCS([floor gettimeofday memset pow sqrt sin exp])

При определенных критериях ожидаемые результаты (checking for x... yes). В противном случае математические функции, указанные выше, утверждаются, что они не определены. Разница заключается в том, что сначала нужно проверить некоторые подпольные процедуры. Это проверено, AC_CHECK_LIB([lapack],[dsyev_],.... Если эти проверки не выполняются первыми, то вышеприведенные математические функции не проверяются (финальная компиляция работает).

Я уменьшил скрипт конфигурации до следующего, который воссоздает проблему,

AC_INIT([TEST], [0.0], [none@none.com])
#AC_CHECK_LIB([lapack],[dsyev_], , AC_MSG_FAILURE([Missing lapack]))
AC_CHECK_FUNCS([floor gettimeofday memset pow sqrt sin exp])

Раскомментирование второй строки приводит к правильным визуальным результатам. Я предполагаю, что математическая библиотека не включена или проверена по некоторой причине. На самом деле AC_CHECK_LIB([m],[exp]) отлично работает.

В чем причина этого и как правильно использовать эту директиву? Какие соображения по поводу x-платформы мне следует соблюдать?

1 Ответ

2 голосов
/ 20 января 2011

Математические функции находятся в математической библиотеке, поэтому, если вы хотите их получить, вам нужно включить математическую библиотеку в аргументы ссылки, используемые configure.AC_CHECK_LIB([m],[exp]) это один из способов сделать это.Причина, по которой AC_CHECK_LIB([lapack],...) также обладает таким эффектом, заключается в том, что он, вероятно, втягивает в себя -lm (не зная библиотеки, но я читал, что это для линейной алгебры).и вместо этого используйте AC_SEARCH_LIBS для функций, которые потенциально отсутствуют в стандартной библиотеке C.Итак,

AC_SEARCH_LIBS(exp, m)
AC_SEARCH_LIBS(dsyev_, lapack)

(но использование AC_CHECK_LIB на самом деле не является неправильным.)

...