LINUX.ORG.RU

{gentoo} Откуда приложения берут версии либ при перекомпиляции?

 , либы, проблемы сборки


1

1

У меня часто бывают проблемы с тем, что после обновления какой-нибудь либы (в последний раз была libgnutls) получается, что все приложения отваливаются из-за того, что у них прописано при сборке libgnutls.so.26, а стало libgnutls.so.28.

Ды мало того, хрен бы с ним, revdep-rebuild на то и нужен, но проблемы вознимают как-раз при revdep-rebuild'e. При перекомпиляции приложения всё-равно смотрят на старый вариант названия файла либы и не могут собраться.

Откуда они вообще берут информацию, какой именно файл им нужен (26 или 28)? И как правильно с этим бороться?

(cmake: error while loading shared libraries: libgnutls.so.26: cannot open shared object file: No such file or directory)

Откуда они вообще берут информацию, какой именно файл им нужен

Им не имя файла нужно, а вызовы библиотек.

как правильно с этим бороться?

Как-то правильную последовательность сборки организовать.

Xenesz ★★★★
()

portage 2.2

Но лучше таки идти делать уроки.

anonymous
()

пересобери все что зависит от gnutls (equery depends gnutls)

Mr_Gentoo
()

где логи? где подробности? одно нытьё.

daemonpnz ★★★★★
()
Ответ на: комментарий от iVS

preserved-rebuild есть. Портаж 2.1.11.31, надо будет поставить альфу. Я не так давно ставил альфу, там какие-то проблемы были (не касаемо портажа самого, а касаемо невозможности что-то там поменять, не помню что). Надо будет ещё раз попробовать.

ktulhu666 ☆☆☆
() автор топика

1). preserved-rebuild (!)

2). subslots

qnikst ★★★★★
()

Ды мало того, хрен бы с ним, revdep-rebuild на то и нужен, но проблемы вознимают как-раз при revdep-rebuild'e. При перекомпиляции приложения всё-равно смотрят на старый вариант названия файла либы и не могут собраться.

Откуда они вообще берут информацию, какой именно файл им нужен (26 или 28)? И как правильно с этим бороться?

За это отвечает libtool, который просматривает *.la файлы, в которых указаны требуемые библиотеки для сборки программы, иногда в них жёстко прописаны версии требуемых библиотек, для исправления *.la файлов есть пакет dev-util/lafilefixer, в некоторых случаях может потребоваться ручная правка *.la файлов для указания требуемой версии библиотеки.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

для исправления *.la файлов есть пакет dev-util/lafilefixer

Давно уже в стабильном портеже FEATURES=«fixlafiles» включено по-умолчанию.

tides
()
Ответ на: комментарий от kostik87

тогда уж можно про --as-needed рассказать :)

qnikst ★★★★★
()
Ответ на: комментарий от PaxtonFettel

Обычная линковка про компиляции очевидна (когда указываешь в хедере что-то.h) и оно собирается в виде отдельной либы (около бинарника a.out), либо прямо внутри исходника (при статической компиляции). Динамическое связывание при исполнении тоже процесс очевидный. Но вот как происходит компиляция при уже существующих либах (и их исходниках) без их компиляции с последующей линковкой - это для меня не очевидно.

И да: не забывай, что я - не прогер и даже не админ :)

ktulhu666 ☆☆☆
() автор топика
Ответ на: комментарий от Thero

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

ktulhu666 ☆☆☆
() автор топика
Ответ на: комментарий от ktulhu666

я бы тогда потыкал в libtool и пересобрал тулчейн, все проблемы с линковкой всегда от либтула.

Thero ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.