2014-05-15 9 views
17

Ich versuche, ein Automake-Projekt einzurichten, das eine Mischung aus Libtool-Bibliotheken und executuables verwendet, und ich habe Schwierigkeiten, die Automake-Dokumentation, insb. bezieht sich darauf, dem Compiler mitzuteilen, gegen welchen Link er sich wenden soll.Was ist der Unterschied zwischen LDADD und LIBADD?

Kann also jemand die Unterschiede zwischen LDADD und LIBADD erklären?

Dinge wie:

  • wenn ist übereinander verwendet,
  • die man -lname_of_library Stil Werte vs. direkte Dateinamen nimmt, usw.

Jedes Mal, wenn ich versuche, das lesen relevante Dokumentation scheint es davon auszugehen, dass ich Dinge kenne, die ich nicht kenne.

Antwort

25

Verwenden Sie die LIBADD primäre für Bibliotheken und LDADD für ausführbare Dateien. Wenn Sie eine libtool Bibliothek libfoo.la bauten, die auf eine andere Bibliothek angewiesen libbar.la, verwenden Sie:

libfoo_la_LIBADD = libbar.la 

Wenn Sie andere nicht-libtool Bibliotheken hätten, würden Sie diese auch hinzufügen, mit -L und -l Optionen:

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

Normalerweise würden Sie das Konfigurationsskript verwenden, um diese zusätzliche Bibliotheken zu finden, und verwenden Sie AC_SUBST sie passieren mit:

libfoo_la_LIBADD = libbar.la $(EXTRA_FOO_LIBS) 

Für ein Programm, benutzen Sie einfach LDADD:

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

Manchmal sind die Grenzen etwas vage sind. $(EXTRA_FOO_LIBS) könnte zu myprog_LDADD hinzugefügt werden. Das Hinzufügen von Abhängigkeiten zu einer Libtool-Bibliothek (.la) und die Verwendung von libtool machen die gesamte plattformspezifische Linker-Magie, ist normalerweise der beste Ansatz. Es behält alle Linker-Metadaten an einem Ort.

9

Wie in einem der Bücher erwähnt, sind LDADD ADDitional Linker (LD) -Elemente - d. H. Elemente, die bei der Verknüpfung hinzugefügt werden. Dies wäre zum Beispiel bei der Erstellung von Programmen. LDADD kann angeben:

  • libtool-Dateien z. lib/libfudge.la
  • Bibliotheken z.B. -lm oder
  • vollständige Pfade zu Bibliotheken, z.B. /lib/libmagicalwonderland.a
  • Linkflaggen & Bibliotheken z.B. -L/opt/lib -lmagical

Sie sind in der Reihenfolge ihrer Präferenz - mit den letzten beiden ist nur Ärger bringen, wie sie auf die Dinge zeigen, die sind oder nicht vorhanden sein können.

LIBADD ist anzugeben, ADDitional Bibliotheken zu verwenden.Dies wird beim Erstellen einer Bibliothek verwendet, um anzugeben, dass zusätzliche Bibliotheken benötigt werden, um die Bibliothek zu erstellen oder zu verwenden. Sie sehen es als etwas wie libfred_la_LIBADD = angegeben. Es kann verwendet werden, um libtool-Bibliotheken oder Systembibliotheken zu spezifizieren und diese Bibliotheken in das resultierende libtool .la für die Bibliothek zu platzieren. Wenn es darum geht, mit der Bibliothek zu verlinken, erhalten Sie alle passenden Bibliotheken mitgebracht.

Sie sollten nur Bibliotheken zum Verknüpfen angeben, also zum Beispiel, meine Bibliothek libfred.la hängt von einigen mathematischen Routinen ab, das hängt von libm ab. Wenn ich die Angabe der zusätzliche Bibliotheken für die Bibliothek, stelle ich fest:

libfred_la_LIBADD = -lm 

Diese Abhängigkeit codiert wird, wenn ich die Bibliothek bauen, und wird auch für die Verbraucher von der Bibliothek weitergegeben.

Die Faustregel:

  • LIBADD für Dinge, die zu einer Bibliothek
  • LDADD für Dinge hinzugefügt werden, die zu einem Programm
hinzugefügt werden