2016-01-24 6 views
0

Как передать флаг '-lm' или указать библиотеку для включения при использовании Autoreconf (Autoconf)?Autoreconf и <math.h> на Linux

Программа включает в себя, и я могу составить так:

gcc -std=c99 myprogram -lm 

Но когда я компилирую VI AUTORECONF, я получаю сообщение об ошибке, говорящее

undefined reference to 'pow' 
undefined reference to 'sqrt' 
etc 

Вопрос находится на Linux, той же программы компилируется без ошибок в OSX.

Как отредактировать configure.ac или Makefile.am, чтобы получить флаг -lm в gcc?

+0

Как вы писали, он также компилируется правильно на Linux. 'atuoconf' - это инструмент построения, а не компилятор. Итак, вопрос в том, что он также правильно работает на OSX - используя те же инструменты. – Olaf

+0

Он делает, но на Linux требуется несколько дополнительных флагов, -lm для одного, -std = c99 для другого. – chernevik

+0

Вы, очевидно, ** ** используете разные инструменты для обеих систем. FYI: на Mac, 'gcc' на самом деле называет' clang'. Это разные компиляторы, поэтому они могут иметь разные значения по умолчанию и могут потребовать разные варианты. В общем, это плохая практика, чтобы полагаться на значения по умолчанию для инструмента. По-видимому, вы используете версию gcc до версии 5 для Linux, поскольку у нее есть 'gnu90' по умолчанию. Используйте более новую версию 5, и вы получите по умолчанию 'gnu11', который также должен скомпилировать код C99. Еще одной проблемой являются библиотеки по умолчанию. – Olaf

ответ

2

Добавить AC_SEARCH_LIBS([sqrt], [m]) в ваш configure.ac.

+0

Также [документация] (http://www.gnu.org/software/autoconf/manual/autoconf.html#index-AC_005fSEARCH_005fLIBS-344) для переменной ac_cv_search_sqrt (кешированная). –

+0

Решенный! Спасибо! – chernevik

2

Добавить эту строку в Makefile.am:

AM_LDFLAGS = -lm 

Это позволит связать математическую библиотеку к вашей программе.

+0

Спасибо, но не работает – chernevik