Как связать общую библиотеку с --as-needed с automake?

Как связать общую библиотеку с --as-needed с помощью Automake? Когда я попытался добавить флаг к LDFLAGS, я увидел, что libtool называется так:

/bin/bash ../../libtool --mode=link ... -Wl,--as-needed ... dependencies

Что приводит к вызову GCC следующим образом:

gcc -shared ... dependencies ... -Wl,--as-needed ...

Но это неправильный порядок.

  • Есть ли способ сделать это с помощью Libtool?

  • Или есть хороший способ создавать общие библиотеки с помощью Automake, но без Libtool? (В прошлом я был разочарован Libtool по разным причинам...)

Похоже, разработчики Debian тоже столкнулись с этой проблемой (отчет об ошибке ), но я хотел бы иметь возможность исправить это для своего проекта, а не возиться с моей системой (если я неправильно понимаю исправление).


person Dietrich Epp    schedule 27.07.2011    source источник
comment
Я надеялся, что все изменилось, учитывая, что ваша ссылка была из 2006 года и упоминала libtool 1.5, но, похоже, нет: sigquit.wordpress.com/2011/02/16/   -  person Jack Kelly    schedule 29.07.2011
comment
Да, я использую libtool 2.2.6.   -  person Dietrich Epp    schedule 29.07.2011


Ответы (3)


Вы можете исправить это только для своего проекта, изменив скрипт ltmain.sh в исходниках проекта. Вы даже можете добавить его как часть начальной загрузки автоинструментов, например: .org/tracker/tracker/commit/cf2ca3414aeba146dceacc5ecd84765f4c08a06f

person Aleksander    schedule 29.07.2011

Вы можете исправить это в Makefile.am; в основном это то же самое, что и ответ на мой вопрос здесь, за исключением того, что вам нужно использовать -(no-)as-needed вместо -(no-)whole-archive.

person ptomato    schedule 31.07.2011
comment
Не могли бы вы расширить это? Проблема в том, что поместить его в LDFLAGS не получится. - person Dietrich Epp; 31.07.2011
comment
Ну, мне казалось, проблема в том, что он вставлен в командную строку в неправильном порядке. Заключив в скобки имя общей библиотеки в командной строке с параметрами, включающими и отключающими поведение, мне кажется, что это должно работать в LDFLAGS. Или я совсем не так понял? - person ptomato; 31.07.2011
comment
Проблема в том, что когда я передаю флаги в libtool в правильном порядке, libtool переупорядочивает их. - person Dietrich Epp; 31.07.2011
comment
Но это решение помещает флаги as-needed и зависимости в один непереупорядочиваемый блок, который libtool видит как один аргумент командной строки. - person ptomato; 31.07.2011
comment
Хорошо, но мне нужно построить командную строку, используя переменные из большой неприятной переменной, полученной из Autoconf, которая содержит другие флаги -Wl. - person Dietrich Epp; 31.07.2011
comment
Хм, тогда наверное от специфики зависит, сработает это решение или нет. - person ptomato; 01.08.2011

Действительно неприятная проблема, особенно для обслуживания пакетов.

В Debian встроена поддержка исправления libtool и устранения этой проблемы в пакетах Debian.

dh_autoreconf --as-needed

Или, если вы используете CDBS:

include /usr/share/cdbs/1/rules/autoreconf.mk

DEB_DH_AUTORECONF_ARGS += --as-needed
person Ichthyo    schedule 03.10.2014