2016-01-24 2 views
0

Comment passer un indicateur '-lm' ou spécifier une bibliothèque à inclure lors de l'utilisation d'Autoreconf (Autoconf)?Autoreconf et <math.h> sous Linux

Le programme comprend et je peux compiler comme ceci:

gcc -std=c99 myprogram -lm 

Mais quand je compile vi autoreconf, je reçois un message d'erreur indiquant

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

La question est sur Linux, le même programme compile sans erreur sur OSX. Comment éditer configure.ac ou Makefile.am pour obtenir l'indicateur -lm à gcc?

+0

Comme vous l'avez écrit, il compile aussi correctement sous Linux. 'atuoconf' est un outil de construction, pas un compilateur. Donc, la question est, si elle s'appuie également sur OSX correctement - en utilisant les mêmes outils. – Olaf

+0

Cela fonctionne, mais construire sur Linux nécessite des drapeaux supplémentaires, -lm pour un, -std = c99 pour un autre. – chernevik

+0

Vous utilisez apparemment ** des outils différents sur les deux systèmes. FYI: sur Mac, 'gcc' appelle réellement' clang'. Ce sont des compilateurs différents, ils peuvent donc avoir des valeurs par défaut différentes et peuvent nécessiter des options différentes. En général, il est mauvais de s'appuyer sur les défauts d'un outil. Apparemment, vous utilisez une version pré-5 de gcc sous Linux, car elle a la valeur par défaut 'gnu90'. Utilisez une version plus récente 5 et vous obtenez le 'gnu11' par défaut qui devrait également compiler le code C99. Les bibliothèques par défaut sont un autre problème de ce type. – Olaf

Répondre

2

Ajoutez AC_SEARCH_LIBS([sqrt], [m]) à votre configure.ac.

+0

Aussi [documentation] (http://www.gnu.org/software/autoconf/manual/autoconf.html#index-AC_005fSEARCH_005fLIBS-344) pour la variable 'ac_cv_search_sqrt' (mise en cache). –

+0

Résolu! Je vous remercie! – chernevik

2

Ajouter cette ligne à votre Makefile.am:

AM_LDFLAGS = -lm 

Cela permettra de relier la bibliothèque de mathématiques à votre programme.

+0

Merci, mais ne fonctionne pas – chernevik