В чем разница между LDADD и LIBADD?

Я пытаюсь настроить проект automake, который использует сочетание библиотек libtool и execuables, и мне трудно ухватиться за документацию по automake, особенно. как относится к указанию компилятору ссылаться на.

Так может кто-то объяснить разницу между LDADD а также LIBADD?

Вещи как:

  • когда один используется над другим,
  • какой берет -lname_of_library значения стиля и прямые имена файлов,
    и т.п.

Всякий раз, когда я пытаюсь прочитать соответствующую документацию, создается впечатление, что я предполагаю, что знаю то, чего не знаю.

21

Решение

Использовать 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 делать всю магию линкера для конкретной платформы, обычно это лучший подход. Он хранит все метаданные компоновщика в одном месте.

31

Другие решения

Как упоминалось в одной из книг, LDADD элементы ADDitional linker (LD) — то есть элементы, которые добавляются при выполнении связывания. Это будет, например, при создании программ. LDADD можно указать:

  • файлы libtool, например 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

Эта зависимость кодируется при сборке библиотеки и также передается потребителям библиотеки.

Эмпирическое правило:

  • LIBADD для вещей, которые добавляются в библиотеку
  • LDADD для вещей, которые добавляются в программу
13

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector