Подтвердить что ты не робот

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

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

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

Вещи вроде:

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

  • файлы libtool, например. lib/libfudge.la
  • библиотеки, например. -lm, или
  • полные пути к библиотекам, например. /lib/libmagicalwonderland.a
  • флаги и библиотеки ссылок, например. -L/opt/lib -lmagical

Они в порядке предпочтения. Использование двух последних просто требует неприятностей, поскольку они указывают на то, что может или не может присутствовать.

LIBADD - указать ADDitional LIBraries для использования. Это используется при создании библиотеки, чтобы указать, что необходимы дополнительные библиотеки для создания или использования библиотеки. Вы увидите, что это указано как что-то вроде libfred_la_LIBADD =. Его можно использовать для указания библиотек libtool или системных библиотек и поместить эти библиотеки в полученный libtool .la для библиотеки, поэтому, когда дело доходит до связывания с библиотекой, вы получаете все соответствующие библиотеки.

Вы должны указывать только ссылки на библиотеки, поэтому, например, моя библиотека libfred.la зависит от некоторых математических процедур, то есть зависит от libm. Когда я указываю дополнительные библиотеки для библиотеки, я указываю:

libfred_la_LIBADD = -lm

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

Правило большого пальца:

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