[sisyphus] XawTV4

Damir Shayhutdinov lost404 на gmail.com
Пт Июл 28 09:41:44 MSD 2006


> ХР> 5 При упаковке пакетов идут сообщения об ненайденных функциях, правда
> ХР> Working, а не Error, поэтому пакет собирается. С ними надо то-же
> ХР> разобраться.
>
>     s/Working/Warning/, насколько понимаю :)
>
>     Обычно такие предупреждения достаточно легко фиксить -- достаточно
>     найти в каком заголовочном файле определена требуемая ф-ция и
>     подключить этот файл.

Слава, советуя, не вводи в заблуждение.

Обычно эти ошибки лечатся чуть сложнее - надо определить, в каких
библиотеках находятся эти функции, затем найти строчку линковки того
.so, в котором unresolved, и добавить туда нужные библиотеки.
Если ругается на
verify-elf: WARNING: /usr/lib/foo/libfoo.so: unresolved symbol megabar
То надо чинить строчку линковки libfoo.so

Для системы сборки, основанной на libtool и automake, эти строчки
линковки могут находиться в файле Makefile.am и выглядеть так:

libfoo_la_LIBADD = -lbar
Или такой строчки может вообще не быть, тогда ее надо будет добавить.

Я обычно делаю поиск

find -name Makefile.am | xargs grep libfoo_la_SOURCES --
Этот поиск покажет, в каком Makefile.am должны быть строчки линковки.

Дальше надо найти, в какой библиотеке находятся отсутствующие символы.
Обычно можно догадаться по названию, но если это не ясно - придется
искать. Я обычно делаю первичный поиск грепов по всем файлам *.so в
каталоге сборки, а потом с помощью nm -CD bar/.libs/libbar.so | grep
megabar определяю, есть ли этот символ в библиотеке libbar.so. (Если
напротив символа стоит U - то нету, а если T - то есть).

Если выяснено, что unresolved символы находятся в библиотеке
libbaz.so, тогда надо добавить в  строчку -lbaz - то есть примерно
так:

libfoo_la_LIBADD = -lbar -lbaz

Если строчки с LIBADD вообще не было, тогда надо ее добавить
libfoo_la_LIBADD= -lbaz

После исправления Makefile.am (и добавления патча в спек), в спеке
перед надо вызвать autoreconf -fisv перед %configure.


Подробная информация о списке рассылки Sisyphus