2010-01-13 14 views
13

Soy autotools newb y tengo dificultades para averiguar cómo fácilmente vincular una biblioteca específica a uno de los destinos configurados.Cómo agregar un enlace a una biblioteca en autoconf configure script/makefile

Tengo un paquete fuente que yo quiero construir la forma habitual: ./configure & & & & hacer make install

Desafortunadamente uno de los CPPS tiene una referencia que falta a otra biblioteca. Compilarlo a mano (ajustar la línea de comandos) funciona. Pero prefiero "parchear" el script de compilación. ¿Dónde está el lugar estándar para editar referencias de enlace?

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

Ese es mi mensaje de error por cierto.

Respuesta

16

Debe agregar la correspondiente bandera -l al AM_LDFLAGS en Makefile.am; ej .:

AM_LDFLAGS = -lboost_system-mt 

Tenga en cuenta que las bibliotecas Boost terminan generalmente en un sufijo — una secuencia de letras que indica la configuración de generación. En el ejemplo anterior, el sufijo es -mt. Esto podría ser diferente en su instalación (aunque la variante -mt está comúnmente disponible en sistemas POSIXy, IME).

que hacer algo como esto:

AM_LDFLAGS = -lboost_system$(BOOST_LIB_SUFFIX) 

BOOST_LIB_SUFFIX es una variable preciosa (ver AC_ARG_VAR) que por defecto es -mt.

+0

conciso y muy útil. Gracias. – AndreasT

1

Uso ax_cxx_check_lib.m4 porque boost_system no tiene ningún símbolos extern "C" (nombres unmangled) que se puede comprobar con AC_CHECK_LIB:

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

Descargar el archivo anterior y el nombre de acinclude.m4, y la puso en la carpeta m4 en la raíz de su proyecto.

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] 
Cuestiones relacionadas