Как связать, используя GCC без -l или пути жесткого кодирования для библиотеки, которая не соответствует соглашению об именах libNAME.so? - PullRequest
41 голосов
/ 16 октября 2008

У меня есть общая библиотека, с которой я хочу связать исполняемый файл с использованием GCC. Общая библиотека имеет нестандартное имя не в форме libNAME.so, поэтому я не могу использовать обычную опцию -l. (Это также расширение Python, поэтому у него нет префикса 'lib'.)

Я могу передать путь к файлу библиотеки непосредственно в командной строке ссылки, но это приводит к жесткому кодированию пути библиотеки в исполняемый файл.

Например:

g++ -o build/bin/myapp build/bin/_mylib.so

Есть ли способ связать эту библиотеку, не вызывая жестко закодированный путь к исполняемому файлу?

Ответы [ 3 ]

66 голосов
/ 11 ноября 2008

Существует префикс ":", который позволяет вам давать разные имена вашим библиотекам. Если вы используете

g++ -o build/bin/myapp -l:_mylib.so other_source_files

должен найти ваш путь для _mylib.so.

2 голосов
/ 16 октября 2008

Если вы можете скопировать общую библиотеку в рабочий каталог при вызове g ++, тогда это должно работать:

g++ -o build/bin/myapp _mylib.so other_source_files
1 голос
/ 16 октября 2008

Если вы работаете в Unix или Linux, я думаю, что вы можете создать символическую ссылку на библиотеку в каталоге, в котором вы хотите библиотеку.

Например:
ln -s build/bin/_mylib.so build/bin/lib_mylib.so

Затем вы можете использовать -l_mylib

http://en.wikipedia.org/wiki/Symbolic_link

...