Продолжение темы:
http://freepascal.ru/forum/viewtopic.php?f=5&t=43532
Во вложении:
1. Проект статической библиотеки libtest_1.a в среде CodeBlocks.
2. Проект динамической библиотеки libtest_1.so в среде CodeBlocks.
3. Проект Lazarus, который вызывает функции из этих библиотек.
Проблема в том, что когда названия этих библиотек одинаковые, Лазарь автоматически создаёт зависимость от so библиотеки, даже если в проекте используются функции только для вызова из статической библиотеки. В проекте вообще может не быть вызовов функций из динамической библиотеки, но лазарь создаст зависимость от неё по собственной инициативе.
В конечном счёте, ldd показывает зависимость от so. При этом, so можно размещать где угодно, но ldd и исполняемый файл so не найдут.
Обход глюка решается методом изменения названий статической и динамической библиотек - они должны быть разные.
Вопрос это реально глюк или в этом есть какой то глубокий смысл?
Глюк компилятора/линковщика?
Модератор: Модераторы
-
cirk-s-konyami
- незнакомец
- Сообщения: 8
- Зарегистрирован: 23.05.2022 16:54:38
Глюк компилятора/линковщика?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Это давняя линуксовая проблема - одинаковые имена у зависимостей. У себя именно переименованием статических либ её и решал. При сборке паскадевской иде с отладчиком именно этот глюк и вылезает. Иногда помогает перестановка местами зависимостей в сборочной команде, это когда сам из командной строки собираешь, возможно у тебя линковщик вначале шарится по системным динамическим либам - какую первую найдёт, ту и присобачивает. Причём, линковаться можно не только к самой либе, но и к либам, которые в неё запакованы внутрь. Их в линуксе ещё больше и там шанс нарваться на совпадение имён и компиляцию не с тем, с чем надо, ещё выше 
Кстати, у паскаля и лазаруса тоже есть модули с одинаковыми именами.
Кстати, у паскаля и лазаруса тоже есть модули с одинаковыми именами.
