2010-01-18 6 views
7

Come posso forzare automake per creare una libreria condivisa standard, invece di una libreria libtoolizzata? Normalmente, creerei il abc.so a cui viene fatto riferimento con un percorso completo e caricato nel programma principale. C'è un modo per costringere AM a fare lo stesso? Se lo elenco come _LIBRARY, automake si lamenta: 'abc.so' is not a standard library name; did you mean 'libabc.a'Automake e librerie condivise standard

Giusto per chiarire: Sì, ho solo bisogno di supporto .so - no statica. E sì, voglio un nome di file personalizzato.

+0

Lol ... Questo è un classico segno di over-engineering da ingegneri. Succede quando gli ingegneri sono autorizzati a guidare i requisiti. Prendono qualcosa di semplice e lo rendono così complesso che è appena utilizzabile (se è utilizzabile a tutti). – jww

risposta

6

Automake non sa come costruire una libreria condivisa perché non c'è un modo portatile per farlo. Se vuoi una libreria condivisa con Automake, devi usare Automake + Libtool. Si noti che è possibile configurare facilmente libtool per non creare alcuna libreria statica (con LT_INIT([disable-static]) nel proprio configure.ac) per impostazione predefinita.

+0

Non proprio quello che avevo in mente, ma ho dovuto accettare qualcosa – viraptor

+0

Hmmm ... Questa non sembra una buona soluzione quando ci viene detto esplicitamente di costruire librerie statiche. Vedi anche [27.8 Emulazione bandiere per oggetti] (https://www.gnu.org/software/automake/manual/html_node/Per_002dObject-Flags.html) nel manuale di Automake. – jww

0

IIRC, non c'è nulla di speciale sulle librerie create con l'aiuto di libtool, a meno che non si colleghi a libltdl. Se non vuoi usare libtool, hai il potere di scegliere e non preoccuparti troppo della portabilità, quindi sei libero di usare automake senza libtool. Consiglierei di usare invece la potenza di libtool.

In realtà, non so nemmeno cosa sia utile per _IBRARY, non l'ho trovato nello the manual/Linking section.

1

Una libreria libtoolizzata è un wrapper attorno a una o più librerie standard. Puoi trovare queste librerie in ".libs" dopo aver eseguito "make", o in "$ prefix/lib" dopo aver eseguito "make install".

Su una macchina Linux, si dovrebbe trovare alla fine un file chiamato "libabc.so".

7

libtool è la strada da percorrere. Se si desidera un nome personalizzato, aggiungere l'opzione per -module _LDFLAGS, ad esempio:

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