2012-01-18 16 views
23

dado algún archivo fuente test.cpp Me gustaría crear una biblioteca compartida libtest.so. Estoy tratando de hacer esto dentro del alcance de un archivo automake, pero parece que no puedo hacer que esto funcione.¿Cómo crear una biblioteca compartida (.so) en un script automake?

Por ejemplo, bajo g ++ hago lo siguiente:

g++ -shared -fPIC test.cpp -o libtest.so 

entonces puedo crear otro archivo que dependerá de la biblioteca compartida de la siguiente manera:

g++ mytest.cpp libtest.so -o blah 

He leído que automake solo admite la creación de bibliotecas compartidas a través de libtool. He intentado hacer que mi scruupt de automake funcione de la siguiente manera, pero nunca parece producir un .so. Lo más cerca que he recibido es para que produzca un .la y .o archivo:

en configure.ac:

AC_ENABLE_SHARED 
AC_DISABLE_STATIC 
AC_PROG_LIBTOOL(libtool) 

en Makefile.am

lib_LTLIBRARIES=libtest.la 
libtest_la_SOURCES=test.cpp 
libtest_la_CFLAGS=-fPIC 
libtest_la_CPPFLAGS=-fPIC 
libtest_la_CXXFLAGS=-fPIC 
libtest_la_LDFLAGS= -shared -fPIC 

es posible que alguien dame un ejemplo de construir un .so basado en lo anterior?

+0

Debe reemplazar AC_PROG_LIBTOOL con LT_INIT –

+1

Bah ... después de escribir esto, me di cuenta de que lo anterior, de hecho, creó el archivo .so en un directorio .libs oculto de mi directorio de origen. Esperemos que esto ayude a alguien más que se pregunta sobre esto. – skimon

+2

¿Alguien puede publicar los ejemplos completos de los archivos aquí? No los archivos fuente, sino configure.ac y Makefile.am. No puedo hacer que esto funcione usando la información en este hilo. –

Respuesta

19

Si usted acaba de poner en LT_INIT configure.ac y en Makefile.am, hacer:

 
lib_LTLIBRARIES = libtest.la 
libtest_la_SOURCES = test.cpp 
libtest_la_LDFLAGS = -version-info 0:0:0 

que debe obtener un .so. No debe especificar -fPIC en CFLAGS, etc. El especificador -version-info no es necesario, pero es una buena idea.

+0

Si es para una prueba y no para ser instalado, ¿no debería ser 'check_LTLIBRARIES'? –

+0

@Jack check_LTLIBRARIES no construirá un .so! Creo que la "prueba" en la pregunta no se refiere al mismo tipo de prueba que implica el prefijo check_. –

Cuestiones relacionadas