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

StackOverflow https://stackoverflow.com/questions/207069

Вопрос

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

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

Например:

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

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

Это было полезно?

Решение

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

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

вам следует найти путь к _mylib.so.

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top