2014-05-15 21 views
17

Sto provando a configurare un progetto di automake che usa un mix di librerie libtool ed exectuables, e sto attraversando un periodo difficile con la documentazione di automake, esp. per quanto riguarda dire al compilatore di collegarsi.Qual è la differenza tra LDADD e LIBADD?

Quindi qualcuno può spiegare le differenze tra LDADD e LIBADD?

le cose come:

  • quando è quello usato sopra l'altro,
  • che si prende -lname_of_library valori di stile contro i nomi di file diretti, ecc

Ogni volta che provo a leggere il documentazione pertinente, sembra che presuma che io conosca cose che non conosco.

risposta

25

Utilizzare il LIBADD primario per le librerie e LDADD per gli eseguibili. Se si stavano costruendo una libreria libtool libfoo.la, che dipendeva da un'altra libreria libbar.la, si usa:

libfoo_la_LIBADD = libbar.la 

Se tu avessi altre librerie non libtool, si potrebbe aggiungere anche questi con -L e -l opzioni:

libfoo_la_LIBADD = libbar.la -L/opt/local/lib -lpng 

In genere, si può usare lo script di configurazione per trovare queste librerie extra, e utilizzare AC_SUBST a passarli con:

libfoo_la_LIBADD = libbar.la $(EXTRA_FOO_LIBS) 

Per un programma, basta usare LDADD:

myprog_LDADD = libfoo.la # links libfoo, libbar, and libpng to myprog. 

A volte i confini sono un po 'vago. $(EXTRA_FOO_LIBS) potrebbe essere stato aggiunto a myprog_LDADD. L'aggiunta di dipendenze a una libreria libtool (.la) e l'utilizzo di libtool eseguono tutte le magie del linker specifico per piattaforma, di solito rappresentano l'approccio migliore. Mantiene tutti i metadati del linker in un'unica posizione.

9

Come menzionato in uno dei libri, LDADD è elementi del linker ADD (LD) - ovvero elementi aggiunti durante l'esecuzione del collegamento. Questo sarebbe, ad esempio, quando si producono programmi. LDADD possibile specificare: file di esempio

  • libtool lib/libfudge.la
  • librerie, ad es. -lm o
  • percorsi completi alle biblioteche, ad es. /lib/libmagicalwonderland.a
  • bandiere di collegamento & librerie, ad es. -L/opt/lib -lmagical

Essi sono in ordine di preferenza - Utilizzando gli ultimi due è solo chiedendo di guai come stanno indicando le cose che possono o non possono essere presenti.

LIBADD consente di specificare LIBRARY addizionali da utilizzare.Questo è usato quando si costruisce una libreria per specificare che sono necessarie librerie aggiuntive per costruire o utilizzare la libreria. Lo vedrai specificato come qualcosa come libfred_la_LIBADD =. Può essere usato per specificare librerie libtool o librerie di sistema e inserirà queste librerie nel libtool risultante .la per la libreria, quindi quando si tratta di collegarsi alla libreria si ottengono tutte le librerie appropriate portate avanti.

È necessario specificare solo le librerie da collegare, quindi, ad esempio, la mia libreria libfred.la dipende da alcune routine matematiche, ovvero dipende dallo libm. Quando sto specificando le librerie aggiuntive per la biblioteca, premetto:

libfred_la_LIBADD = -lm 

Questa dipendenza è codificato quando costruire la biblioteca, e viene trasmesso ai consumatori della biblioteca pure.

La regola generale è:

  • LIBADD per le cose che vengono aggiunti a una libreria
  • LDADD per le cose che vengono aggiunti a un programma