[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