Я пытаюсь настроить проект automake, который использует сочетание библиотек libtool и execuables, и мне трудно ухватиться за документацию по automake, особенно. как относится к указанию компилятору ссылаться на.
Так может кто-то объяснить разницу между LDADD
а также LIBADD
?
Вещи как:
-lname_of_library
значения стиля и прямые имена файлов,Всякий раз, когда я пытаюсь прочитать соответствующую документацию, создается впечатление, что я предполагаю, что знаю то, чего не знаю.
Использовать LIBADD
первичный для библиотек, и LDADD
для исполняемых файлов. Если вы строили библиотеку libtool libfoo.la
, что зависит от другой библиотеки libbar.la
, вы бы использовали:
libfoo_la_LIBADD = libbar.la
Если бы у вас были другие библиотеки не-libtool, вы бы также добавили их -L
а также -l
опции:
libfoo_la_LIBADD = libbar.la -L/opt/local/lib -lpng
Как правило, вы должны использовать скрипт configure для поиска этих дополнительных библиотек и использовать AC_SUBST
передать их с:
libfoo_la_LIBADD = libbar.la $(EXTRA_FOO_LIBS)
Для программы просто используйте LDADD
:
myprog_LDADD = libfoo.la # links libfoo, libbar, and libpng to myprog.
Иногда границы немного расплывчаты. $(EXTRA_FOO_LIBS)
можно было бы добавить к myprog_LDADD
, Добавление зависимостей в libtool (.la
) библиотека и использование libtool
делать всю магию линкера для конкретной платформы, обычно это лучший подход. Он хранит все метаданные компоновщика в одном месте.
Как упоминалось в одной из книг, LDADD
элементы ADDitional linker (LD) — то есть элементы, которые добавляются при выполнении связывания. Это будет, например, при создании программ. LDADD
можно указать:
lib/libfudge.la
-lm
, или же/lib/libmagicalwonderland.a
-L/opt/lib -lmagical
Они в порядке предпочтения — использование последних двух просто просить для проблемы, поскольку они указывают на вещи, которые могут или не могут присутствовать.
LIBADD
указать дополнительные библиотеки для использования. Это используется при создании библиотеки, чтобы указать, что дополнительные библиотеки необходимы для создания или использования библиотеки. Вы увидите, что это указано как что-то вроде libfred_la_LIBADD =
, Он может использоваться для указания библиотек libtool или системных библиотек и помещает эти библиотеки в результирующий libtool .la
для библиотеки, поэтому, когда дело доходит до связывания с библиотекой, вы получаете все необходимые библиотеки.
Вы должны только указать библиотеки для ссылки, так, например, моя библиотека libfred.la
зависит от некоторых математических процедур, то есть зависит от libm
, Когда я указываю дополнительные библиотеки для библиотеки я заявляю:
libfred_la_LIBADD = -lm
Эта зависимость кодируется при сборке библиотеки и также передается потребителям библиотеки.
Эмпирическое правило: