2010-01-18 18 views
7

¿Cómo puedo forzar a automake a crear una biblioteca compartida estándar, en lugar de una biblioteca libre? Normalmente, creo el abc.so al que se hace referencia con una ruta completa y se carga en el programa principal. ¿Hay alguna manera de obligar a AM a hacer lo mismo? Si lo incluyo como _LIBRARY, automake se queja: 'abc.so' is not a standard library name; did you mean 'libabc.a'Automake y bibliotecas compartidas estándar

Solo para aclarar: Sí, solo necesito .so compatibilidad - no estática. Y sí, quiero un nombre de archivo personalizado.

+0

Lol ... Este es un signo clásico de un exceso de ingeniería por los ingenieros. Sucede cuando los ingenieros pueden conducir requisitos. Toman algo simple y lo hacen tan complejo que apenas se puede usar (si se puede usar). – jww

Respuesta

6

Automake no sabe cómo crear una biblioteca compartida porque no hay una forma portátil de hacerlo. Si desea una biblioteca compartida con Automake, debe usar Automake + Libtool. Tenga en cuenta que puede configurar fácilmente libtool para no compilar ninguna biblioteca estática (con LT_INIT([disable-static]) en su configure.ac) de forma predeterminada.

+0

No era realmente lo que tenía en mente, pero llegué a aceptar algo – viraptor

+0

Hmmm ... Esto no parece una buena solución cuando se le indica explícitamente que cree bibliotecas estáticas. Consulte también [27.8 Emulación de indicadores por objeto] (https://www.gnu.org/software/automake/manual/html_node/Per_002dObject-Flags.html) en el manual de Automake. – jww

0

IIRC, no hay nada especial acerca de las bibliotecas creadas con la ayuda de libtool, a menos que se vincule con libltdl. Si no quiere usar libtool, tiene el poder de elegir y no le importa demasiado la portabilidad, entonces puede usar automake sin libtool. Yo recomendaría usar el poder de libtool en su lugar.

En realidad, ni siquiera sé para qué sirve _LIBRARY, no lo encontré en el the manual/Linking section.

1

Una biblioteca libtoolized es un contenedor de una o más bibliotecas estándar. Puede encontrar estas bibliotecas en ".libs" después de ejecutar "make", o en "$ prefix/lib" después de ejecutar "make install".

En una máquina Linux, debe encontrar eventualmente un archivo llamado "libabc.so".

7

libtool es el camino a seguir. Si usted quiere un nombre personalizado, añada la opción -module a _LDFLAGS, por ejemplo:

plugindir= /some/where 
plugin_LTLIBRARIES= abc.la 
abc_la_LDFLAGS= -module 
Cuestiones relacionadas