Относительные пути для разделяемых библиотек

Я работаю с 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

Примечание: одинарные кавычки важны в приведенной выше команде.

Другие вопросы по тегам