2013-01-06 24 views
5

posso collegarmi con successo contro libawesomium-1.6.5.so:Collegamento contro libreria condivisa, chiamando programma senza LD_LIBRARY_PATH personalizzato

-L-L. 
-L-lawesomium-1.6.5 
-L-ldl 

libawesomium-1.6.5.so è nella stessa directory come il mio eseguibile, ora se provo a chiamare il mio programma (che chiamerò esso prog per ora), ma esiste con:

./prog: error while loading shared libraries: libawesomium-1.6.5.so.0: cannot open shared object file: No such file or directory 

Così ho un link simbolico che punta al libawesomium-1.6.5.so.0libawesomium-1.6.5.so, in esecuzione prog di nuovo mi dà lo stesso errore, definendolo con un costume LD_LIBRARY_PATH=./ funziona, ma voglio distribuire prog e voglio che l'utente sia in grado di usare prog senza i diritti di root (installazione di awesomium su /usr/lib ecc.) E senza bisogno di impostare lo LD_LIBRARY_PATH. Un'opzione sarebbe uno script di shell che imposta lo LD_LIBRARY_PATH, ma preferirei un modo diverso (ho anche sentito che impostare LD_LIBRARY_PATH è una cattiva idea).

Inoltre, sarebbe fantastico se non fosse necessario creare il collegamento simbolico a libawesomium-1.6.5.so.0.

EDIT:

Passando -rpath=. alle opere linker! Ma awesomium purtroppo non può trattare con esso:

/.../awesomium_test/AwesomiumProcess: error while loading shared libraries: libawesomium-1.6.5.so.0: cannot open shared object file: No such file or directory 

Utilizzando -rpath e impostazione LD_LIBRARY_PATH dall'interno prog lavora

risposta

6

Se si utilizza gcc, è possibile passare -Wl,-rpath=lib_directory per fare in modo che l'eseguibile esegua la ricerca nelle librerie nella directory lib_directory.

Inoltre, questo argomento accetta un valore speciale $ORIGIN che rappresenta la directory contenente il programma eseguito. Quindi se si passa -Wl,-rpath='$ORIGIN' a gcc, sarà possibile mantenere libawesomium-1.6.5.so nella stessa directory del programma.

+0

Wow funziona, grazie! Beh, non completamente, vedi la mia modifica. – dav1d

+0

L'ho capito! Posso impostare 'LD_LIBRARY_PATH' prima di caricare awesomium all'interno del mio programma. – dav1d

+0

Dovresti passare '-Wl, -rpath = '$ ORIGIN'' invece di' -Wl, -rpath = .' e LI_LIBRARY_PATH sarà inutile. – Julien

1

L'errore è dovuto al fatto. non è sulla tua strada Le tue opzioni sono di distribuire uno script bash che esegue il binario con il set LD_LIBRARY_PATH, come dici tu, o di copiare l'oggetto condiviso in/usr/lib o/usr/local/lib o ovunque adatto su quella particolare piattaforma.

Non c'è davvero alcuna scorciatoia, a meno che non si voglia collegare in modo statico.

+0

Sì, volevo evitare entrambi i modi. Grazie per aver chiarito che non c'è altro modo. Il collegamento statico non funziona, perché non esiste la lib statica per awesomium (fonte chiusa, solo .so è fornito) – dav1d

Problemi correlati