2014-05-15 9 views
17

Próbuję skonfigurować projekt automake, który korzysta z biblioteki libtool i exectuables, i mam trudny czas grokowanie dokumentacji automake, szczególnie. w odniesieniu do informowania kompilatora o połączeniu.Jaka jest różnica między LDADD i LIBADD?

Czy ktoś może wyjaśnić różnice między LDADD a LIBADD?

miejsca jak:

  • gdy jest używany jeden nad drugim,
  • których jedna zajmuje -lname_of_library wartości stylu vs. bezpośrednie nazwy plików, itp

Ilekroć próbuję czytać odpowiednią dokumentację, wydaje się, że zakłada, że ​​wiem rzeczy, których ja nie wiem.

Odpowiedz

25

Użyj podstawowego dla bibliotek oraz LDADD dla plików wykonywalnych. Jeśli budowali bibliotekę libtool libfoo.la, że zależała od innej biblioteki libbar.la, użyłbyś:

libfoo_la_LIBADD = libbar.la 

jeśli miał inne biblioteki non-libtool, należy także dodać te z -L i -l opcji:

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

Zazwyczaj należy użyć skryptu configure, aby znaleźć te dodatkowe biblioteki i używać AC_SUBST przekazać im:

libfoo_la_LIBADD = libbar.la $(EXTRA_FOO_LIBS) 

Dla programu, wystarczy użyć LDADD:

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

Czasami granice są trochę niejasne. $(EXTRA_FOO_LIBS) mógł zostać dodany do myprog_LDADD. Dodawanie zależności do biblioteki libtool (.la) i korzystanie z całej magii łączącej platformy jest zwykle najlepszym rozwiązaniem. Zachowuje wszystkie metadane linkera w jednym miejscu.

9

Jak wspomniano w jednej z książek, LDADD to ADDitional linker (LD) - elementy, które są dodawane podczas wykonywania łączenia. Byłoby to na przykład przy tworzeniu programów. LDADD można określić:

  • pliki libtool np. lib/libfudge.la
  • biblioteki np. -lm lub
  • pełne ścieżki do bibliotek, np. /lib/libmagicalwonderland.a
  • flagi linków & biblioteki np. -L/opt/lib -lmagical

Są to w kolejności preferencji - Korzystanie dwa ostatnie jest tylko prosząc za kłopoty jak oni wskazując na rzeczy, które mogą lub nie mogą być obecne.

LIBADD to określenie DODATKOWYCH LIBRARI do użycia.Jest to używane podczas budowania biblioteki, aby określić, że dodatkowe biblioteki są potrzebne do zbudowania lub korzystania z biblioteki. Zobaczysz go jako coś w rodzaju libfred_la_LIBADD =. Może być używany do określania bibliotek libtool lub bibliotek systemowych i będzie umieszczał te biblioteki w wynikowej bibliotece libtool .la dla biblioteki, więc jeśli chodzi o łączenie się z biblioteką, otrzymujesz wszystkie odpowiednie biblioteki ze sobą.

Powinieneś tylko określać biblioteki do połączenia, więc na przykład moja biblioteka libfred.la zależy od pewnych procedur matematycznych, tj. Zależy od libm. Kiedy jestem Określanie dodatkowych bibliotek dla biblioteki, stwierdzam:

libfred_la_LIBADD = -lm 

Ta zależność jest kodowany kiedy zbudować bibliotekę, i zostanie przeniesiony na konsumentów biblioteki, jak również.

Zasadą jest:

  • LIBADD na rzeczy, które są dodawane do biblioteki
  • LDADD na rzeczy, które są dodawane do programu
Powiązane problemy