относительные пути для разделяемых библиотек - PullRequest
5 голосов
/ 23 августа 2011

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

9 голосов
/ 27 августа 2011

Как я могу сделать связывание библиотек относительно папки родительской программы

Зависит от вашей операционной системы.В Linux это, вероятно, будет работать:

g++ -shared -o wrapper.so -Wl,-rpath='$ORIGIN' src/wrapper.o one.so two.so

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

...