У меня проблема очень похожа на this question. Мне нужно сказать компоновщику, чтобы добавить статический lib, несмотря на то, что для ссылки на его символы, кажется, сделано. Причина в том, что библиотека содержит функцию в .init
или использует (__attribute__ ((constructor))
) для выполнения ее инициализации, которая, в свою очередь, будет вызывать функцию register() из основной программы для регистрации ее функциональности (чтение: передать другую указатели функций).autools, libtool и -Wl, -все-архив
Так что, несмотря на то, что в основной программе не используется символ из библиотеки, основная программа будет вызывать функции из библиотеки, как только последние будут зарегистрированы через функцию init библиотеки.
Но я использую Libtool ... Так беря пример, приведенный в ранее упоминалось вопрос, я должен был бы написать что-то вроде:
bin_PROGRAMS = pktanon
pktanon_SOURCES = main.cpp
pktanon_DEPENDENCIES = $(lib_LIBRARIES)
pktanon_LDADD = libpktanon.la $(LDADD)
Обратите внимание на «ля» расширение вместо «а "для lib.
Теперь, как я могу передать опцию --whole-archive
в компоновщик? Ответ, предложенный в the question, предполагает, что путь к архиву (.a
файл) известен ... Неверно, что он жестко кодирует путь, например .libs/libptanon.a в Makefile.am ... И компоновщик делает не нравится встречая .la
файл в целом-архив otpion если попробовать:
pktanon_LDFLAGS = -Wl,--whole-archive,libpktanon.la,--no-whole-archive
есть предложения?
Проблема заключается в том, что моя библиотека использует символы из основной программы, а не наоборот: autotools предполагает, что удобство libs L определяет символы, на которые ссылается основная программа P: autotools передаст P и L в компоновщик в этом порядке. Без опции -whole-archive (или -start-group) компоновщик не будет «сшивать» L и P. В моем случае L относится к символам из P: P определяет символы, на которые ссылается L, что является противоположностью предположений autotools. У этого парня была такая же проблема: http://lists.gnu.org/archive/html/automake/2006-03/msg00042.html См. Раздел II (мотивация) раздела 3. – user1159290
Вам будет лучше, если вы исправьте свой дизайн, чтобы он не был круговым - или просто рассматривайте вашу «библиотеку» как коллекцию объектных файлов и не пытайтесь помещать их в архив. Например, такой дизайн нельзя переносить в Windows. –