2011-01-20 3 views
3

У меня возникли проблемы с использованием конфигурационного скрипта, подтверждающего наличие некоторых основных функций,Противоречивые результаты AC_CHECK_FUNCS

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

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

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

AC_INIT([TEST], [0.0], [[email protected]]) 
#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]) отлично работает.

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

ответ

2

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

Я предлагаю вам избегать AC_CHECK_LIB и вместо этого использовать AC_SEARCH_LIBS для функций, которые потенциально не входят в стандартную библиотеку C. Так

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

(Но использование AC_CHECK_LIB это на самом деле не так.)

+0

У вас есть более глубокое представление о том, почему в поисках 'lapack' производит правильные результаты для' ac_check_funcs' позже? Он должен изменить среду, но что? – nlucaroni

+0

Зачем использовать AC_SEARCH_LIBS? Есть ли системное преимущество? «Предложение» идет только до тех пор, когда я сижу перед 1k строками файла конфигурации. Фу, когда я, наконец, переделаю этот скрипт configure, покупаю акции в компаниях Scotch. – nlucaroni

+0

'configure' добавляет любую найденную библиотеку к переменной' LIBS' и использует ее для последующих тестов. 'lapack', вероятно, связан с' libm', поэтому привязка к 'lapack' делает символы в libm' доступными. –

Смежные вопросы