Как связать с помощью GCC без -l или жесткого пути для библиотеки, которая не соответствует соглашению об именах libNAME.so?
-
03-07-2019 - |
Вопрос
У меня есть общая библиотека, которую я хочу связать с исполняемым файлом с помощью 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