Связывание проблем с общими объектами в Linux (с помощью простого так в консольном приложении) - PullRequest
0 голосов
/ 24 июня 2010

У меня есть общий объект (abc.so), который я создал после связывания его с кучей файлов libs (.a и .so).Теперь этот abc.so просто предоставляет 3 функции.

Теперь я пишу консольное приложение для Linux, которое использует этот abc.so для вызова этих функций.Когда я пытаюсь построить это приложение,

я получаю кучу - " неопределенная ссылка на" xxxxxxx ' "ошибок.Теперь эти ссылки указывают на то, что abc.so зависит от abd, и даже углубляются в ссылки внутри этих элементов.

Я не уверен, почему это происходит.Должен ли он загружать их во время выполнения?По крайней мере, это то, что я подумал (приближается фон windows / MSVC).

Пожалуйста, помогите мне в этом.

Ответы [ 2 ]

2 голосов
/ 24 июня 2010

Вы должны связать свое приложение со ссылкой на все общие объекты (.so), от которых зависит ваше приложение. Вам не нужно связывать со статически включенными архивами (.a)

Если abc.so построен с использованием a.so, b.so и c.a, вам придется связать ваше приложение с abc.so, a.so и b.so.

Когда ваше приложение правильно связано, вы также должны быть уверены, что оно может найти общие объекты. Вы можете использовать 'ldd myapp' для отображения зависимостей общих объектов.

my2c

1 голос
/ 24 июня 2010

Вам все еще нужно связать файл библиотеки, но вы сообщаете компоновщику, что символы должны загружаться во время выполнения из общей библиотеки, связываясь с файлом .so.Как выглядит ваша командная строка компоновщика?

Также проверьте ваш LD_LIBRARY_PATH.Если ваша разделяемая библиотека не находится в одном из стандартных расположений, например /usr/lib, вам необходимо выполнить:

export LD_LIBRARY_PATH=pathToDirWithYourSharedLibrary:$LD_LIBRARY_PATH

Если этого не произойдет, вы получите ошибки времени выполнения.

...