Как связать использование GCC без -l или пути hardcoding для библиотеки, которая не соответствует соглашению об именах libNAME.so?
У меня есть общая библиотека, в которой я хочу связать исполняемый файл с использованием GCC. В общей библиотеке есть нестандартное имя, а не форма libNAME.so, поэтому я не могу использовать обычный параметр -l. (Он также является расширением Python и поэтому не имеет префикса ‘lib’.)
Я могу передать путь к файлу библиотеки непосредственно в командной строке ссылки, но это приводит к тому, что путь библиотеки будет жестко закодирован в исполняемый файл.
Например:
- Force GCC уведомлять о неопределенных ссылках в разделяемых библиотеках
- Самый простой способ установить зависимости Python от узлов-исполнителей Spark?
- Разница между статическими и разделяемыми библиотеками?
- Инструмент статического анализа для обнаружения разрывов ABI в C ++
- GCC создает общий объект вместо исполняемого двоичного кода
g++ -o build/bin/myapp build/bin/_mylib.so
Есть ли способ связать эту библиотеку, не заставляя путь быть жестко закодированным в исполняемый файл?
- Как установить путь выполнения (-rpath) исполняемого файла с помощью gcc в Mac OSX?
- Почему файлы LIB файлов имеют такой двусмысленный характер?
- Почему я получаю ошибку gcc «undefined reference», пытающуюся создать общие объекты?
- Как использовать addr2line в Android
- Добавить сетевую папку как только для чтения в Windows 8
- Ограничение видимости символов при связывании разделяемых библиотек
- В чем разница между -rpath и -L?
- Автоматически выполняемые функции при загрузке разделяемых библиотек
Существует префикс «:», который позволяет вам указывать разные имена в ваших библиотеках. Если вы используете
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