2010-01-13 15 views
13

Je suis un autotools newb et j'ai du mal à trouver comment facilement lier une bibliothèque spécifique dans l'une des cibles configurées.Comment ajouter un lien vers une bibliothèque dans autoconf configure script/makefile

J'ai un paquet source que je veux construire la façon habituelle: ./configure & & faire & & make install

Malheureusement, l'un des CPPS a une référence manquante à une autre bibliothèque. La compilation à la main (en ajustant la ligne de commande) fonctionne. Mais je préférerais "patcher" le script de compilation. Où est l'emplacement standard pour modifier les références de liaison?

undefined reference to `boost::system::get_system_category() 

C'est mon message d'erreur btw.

Répondre

16

Vous devez ajouter le drapeau -l correspondant à AM_LDFLAGS dans Makefile.am; .: par exemple

AM_LDFLAGS = -lboost_system-mt 

Notez que les bibliothèques Boost se terminent généralement par un suffixe — une séquence de lettres qui indique la configuration de construction. Dans l'exemple ci-dessus, le suffixe est -mt. Cela pourrait être différent dans votre installation (bien que la variante -mt soit couramment disponible sur les systèmes POSIXy, IME).

je fais quelque chose comme ceci:

AM_LDFLAGS = -lboost_system$(BOOST_LIB_SUFFIX) 

BOOST_LIB_SUFFIX est une variable précieuse (voir AC_ARG_VAR) que par défaut -mt.

+0

Concise et très utile. THX. – AndreasT

1

Utilisez ax_cxx_check_lib.m4 parce que boost_system n'a pas de externat symboles « C » (nom non substantypés) qui peuvent être vérifiés avec AC_CHECK_LIB:

http://ac-archive.sourceforge.net/guidod/ax_cxx_check_lib.m4

Téléchargez le fichier ci-dessus et nommez-le acinclude.m4, et le mettre dans le dossier m4 dans la racine de votre projet.

En configure.ac:

AC_LANG_PUSH([C++]) 

AX_CXX_CHECK_LIB([boost_system-mt],[boost::system::generic_category()],[BOOST_LIB_SUFFIX="-mt"],[BOOST_LIB_SUFFIX=""]) 

AC_LANG_POP([C++]) 

AC_SUBST(BOOST_LIB_SUFFIX) 

En Makefile.am:

[artifact_name]_LDFLAGS = [email protected][email protected]