2012-01-18 20 views
23

dato un file sorgente test.cpp Mi piacerebbe creare una libreria condivisa libtest.so. Sto cercando di farlo nell'ambito di un file di automake, ma non riesco a farlo funzionare.Come creare una libreria condivisa (.so) in uno script di automake?

Per esempio sotto g ++ faccio la seguente:

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

allora posso creare un altro file che dipenderà la libreria condivisa come segue:

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

Ho letto che automake supporta solo la creazione di librerie condivise tramite libtool. Ho cercato di far funzionare il mio scriupt automake come segue, ma non sembra mai produrre un .so. Il più vicino che ho ottenuto è per di produrre un .la e .o del file:

in configure.ac:

AC_ENABLE_SHARED 
AC_DISABLE_STATIC 
AC_PROG_LIBTOOL(libtool) 

in 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 

Potrebbe qualcuno dammi un esempio di costruzione di un .so basato su quanto sopra?

+0

È necessario sostituire AC_PROG_LIBTOOL con LT_INIT –

+1

Bah ... dopo aver scritto questo ho capito che quanto sopra ha effettivamente creato il file .so in una directory .libs nascosta della mia directory di origine. Speriamo che questo aiuti qualcun altro che si meraviglia di questo. – skimon

+2

Qualcuno può pubblicare qui gli esempi completi dei file? Non i file di origine, ma configure.ac e Makefile.am. Non riesco a farlo funzionare utilizzando le informazioni in questa discussione. –

risposta

19

Se hai appena messo in LT_INIT configure.ac e in Makefile.am, do:

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

si dovrebbe ottenere un .so. Non si deve specificare -fPIC su CFLAGS, ecc. Lo specificatore -version-info non è necessario, ma è una buona idea.

+0

Se è per un test e non deve essere installato, non dovrebbe essere 'check_LTLIBRARIES'? –

+0

@Jack check_LTLIBRARIES non costruirà un .so! Penso che il "test" nella domanda non si riferisca allo stesso tipo di test come implica il prefisso check_. –

Problemi correlati