2011-08-23 32 views
5

Estoy trabajando con JNI. Tengo una biblioteca contenedora (wrapper.so) que usa dos bibliotecas compartidas: one.so y two.sorutas relativas para bibliotecas compartidas

Todo funciona bien. Todos * .so están en la carpeta lib, dentro de la carpeta del programa.

El problema es que si copio esta carpeta en otra computadora, tengo problemas de enlace.

Digamos que ejecutar esto en un usuario2 máquina (/ home/usuario2/programa), y compilé en un usuario1 máquina (/ home/user1/programa), me sale el error vincular:

UnsatisfiedLinkError: /home/user1/program/lib/one.so

¿Cómo puedo hacer que la vinculación de las bibliotecas relativos a la carpeta del programa de los padres (como, búsqueda de this_foler/lib ??

estoy compilando como :

g++ -c -o src/wrapper.o src/wrapper.c 
g++ -shared -o wrapper.so src/wrapper.o one.so two.so 

Respuesta

8

How I can make the linking of the libraries relative to the parent program folder

Depende de su sistema operativo. En Linux, esto probablemente va a trabajar:

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

Nota: las comillas simples son importante en el comando anterior.

+1

@Rockskull si la respuesta funciona, se supone que debes aceptarla, votarla o ambas cosas. Si no lo hace, algunas personas no se molestarán en responder sus preguntas en el tiempo. –

+0

Lo siento. Nuevo en el desbordamiento de pila. Lo acepto, pero no puedo votarlo. – lcguida

+0

@EmployedRussian ¿Conoces el comando correspondiente para el compilador de inteligencia? Gracias. – xslittlegrass

Cuestiones relacionadas