Я пытаюсь связать разделяемую библиотеку с другой разделяемой библиотекой (protobuf) с опцией -rpath, проблема в том, что библиотека находится в другом каталоге во время компиляции, чем во время выполнения, а опция -rpath требует наличия пути во время компиляции. (поэтому я получаю ошибку «Нет такого файла или каталога»)
Есть ли обходной путь для этого?
Я бы предпочел не использовать переменную LD_LIBRARY_PATH для решения этой проблемы.
-rpath указывает путь поиска библиотеки времени выполнения.
Вот цитата из ссылки Библиотека программ HOWTO
«Во время разработки существует потенциальная проблема изменения библиотеки, которая также используется многими другими программами — и вы не хотите, чтобы другие программы использовали developmental''library, only a particular application that you're testing against it. One link option you might use is ld's
Параметр rpath », который указывает путь поиска библиотеки времени выполнения конкретной компилируемой программы. Из gcc вы можете вызвать опцию rpath, указав ее следующим образом:
-Wl, -rpath, $ (DEFAULT_LIB_INSTALL_PATH)
Если вы используете эту опцию при сборке клиентской программы библиотеки, вам не нужно беспокоиться о LD_LIBRARY_PATH (описано далее), кроме как для гарантии того, что он не конфликтует, или использования других методов для скрытия библиотеки. «
Я нашел ответ здесь Могу ли я изменить ‘rpath’ в уже скомпилированном двоичном файле?
Изменение rpath после компиляции решает мою проблему.
[Редактировать] Есть другой, лучший подход: как сделать ссылку на общую библиотеку из общей библиотеки с относительным путем