2010-01-13 5 views
13

Ich bin ein autotools newb und ich habe Schwierigkeiten herauszufinden, wie einfach verknüpfen Sie eine bestimmte Bibliothek in eines der konfigurierten Ziele.Wie füge ich einen Link zu einer Bibliothek in autoconf configure script/makefile

Ich habe ein Quellpaket, das ich die übliche Art und Weise aufbauen will: configure & & machen & & make install

Leider einer der CPPS in einer anderen Bibliothek einen fehlenden Bezug hat. Kompilieren von Hand (Anpassen der Befehlszeile) funktioniert. Aber ich würde lieber das Compilier-Skript "patch". Wo ist der Standardbereich zum Bearbeiten von Verknüpfungsreferenzen?

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

Das ist meine Fehlermeldung BTW.

Antwort

16

Sie müssen das entsprechende -l Flag zu AM_LDFLAGS in Makefile.am hinzufügen; z.B .:

AM_LDFLAGS = -lboost_system-mt 

Beachten Sie, dass Bibliotheken im Allgemeinen in einem Suffix — eine Folge von Buchstaben Anhebung, die die Build-Konfiguration anzeigt. Im obigen Beispiel lautet das Suffix -mt. Dies könnte bei Ihrer Installation anders sein (obwohl die -mt-Variante normalerweise auf POSIXy-Systemen, IME, verfügbar ist).

ich etwas wie folgt aus:

AM_LDFLAGS = -lboost_system$(BOOST_LIB_SUFFIX) 

BOOST_LIB_SUFFIX ein kostbares Variable (AC_ARG_VAR sehen), dass standardmäßig -mt.

+0

Concise und sehr hilfreich. Danke. – AndreasT

1

Verwenden ax_cxx_check_lib.m4 weil boost_system keine extern "C" Symbole (unmangled Namen) hat, die mit AC_CHECK_LIB geprüft werden kann:

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

die Datei herunterladen oben und nennen Sie es acinclude.m4, und steckte es in Der Ordner m4 in Ihrem Projektstammverzeichnis.

In 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) 

In Makefile.am:

[artifact_name]_LDFLAGS = [email protected][email protected] 
Verwandte Themen