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

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

person lcguida    schedule 23.08.2011    source источник


Ответы (1)


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

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

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

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

person Employed Russian    schedule 27.08.2011
comment
@Rockskull, если ответ работает, вы должны принять его, проголосовать за него или и то, и другое. Если вы этого не сделаете, некоторые люди могут не потрудиться ответить на ваши вопросы в ближайшее время. - person Employed Russian; 30.08.2011
comment
Извините. Новое в Stack Overflow. Я принимаю его, но не могу проголосовать. - person lcguida; 05.09.2011
comment
@EmployedRussian Знаете ли вы соответствующую команду для компилятора Intel? Спасибо. - person xslittlegrass; 12.09.2014
comment
@xslittlegrass Синтаксис -Wl,... довольно универсален, и icc тоже должен поддерживаться, по крайней мере, насколько я могу судить из computing.llnl.gov/tutorials/linux_clusters/man/icc.txt - person Employed Russian; 13.09.2014
comment
Я не мог заставить его работать из файла makefile. имел -Wl, -rpath = RIGIN /../ вывод Lib. использование double $$ решило это для меня. Итак, если это находится в make-файле, используйте -Wl, -rpath = '$$ ORIGIN' - person mousomer; 20.07.2015