Относительные пути для разделяемых библиотек
Я работаю с JNI. У меня есть библиотека-оболочка (wrapper.so), которая использует две общие библиотеки: one.so и two.so
Все отлично работает Все *.so находятся в папке lib, внутри папки программы.
Проблема в том, что если я скопирую эту папку на другой компьютер, у меня возникнут проблемы с связыванием.
Допустим, я запускаю это на машине user2 (/home/user2 /program), и я скомпилировал на машине user1 (/home/user1 /program), я получаю ошибку компоновки:
UnsatisfiedLinkError: /home/user1/program/lib/one.so
Как я могу сделать связывание библиотек относительно родительской папки программы (например, поиск this_foler/lib??
Я собираю как:
g++ -c -o src/wrapper.o src/wrapper.c
g++ -shared -o wrapper.so src/wrapper.o one.so two.so
1 ответ
Как я могу сделать связывание библиотек относительно родительской папки программы
Зависит от вашей операционной системы. В Linux это, вероятно, будет работать:
g++ -shared -o wrapper.so -Wl,-rpath='$ORIGIN' src/wrapper.o one.so two.so
Примечание: одинарные кавычки важны в приведенной выше команде.