2013-01-06 42 views
5

我可以成功鏈接對libawesomium-1.6.5.so對鏈接共享庫,調用程序沒有定製LD_LIBRARY_PATH

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

libawesomium-1.6.5.so是在同一目錄作爲我的可執行文件,現在如果我嘗試調用我的程序(我會打電話給它PROG現在),它的存在有:

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

所以我做一個符號鏈接libawesomium-1.6.5.so.0指向libawesomium-1.6.5.so,再次運行prog給了我同樣的錯誤,有一個自定義的012叫它的作品,但我想分發prog,我希望用戶能夠使用prog與root權限(安裝awesomium到/usr/lib等),而不需要設置LD_LIBRARY_PATH。一個選項是設置LD_LIBRARY_PATH的shell腳本,但我更喜歡不同的方式(我也聽說設置LD_LIBRARY_PATH是一個壞主意)。

此外,如果不需要創建符號鏈接到libawesomium-1.6.5.so.0,那將是非常好的。

編輯:

傳遞-rpath=.到鏈接的作品!但不幸的是awesomium不能對付它:

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

使用-rpath和設置LD_LIBRARY_PATH從內PROG工作

回答

6

如果使用gcc,則可以通過-Wl,-rpath=lib_directory以使可執行文件搜索目錄lib_directory中的庫。

此外,該參數接受一個特殊值$ORIGIN,它表示包含執行程序的目錄。因此,如果您將-Wl,-rpath='$ORIGIN'傳遞給gcc,您將可以將libawesomium-1.6.5.so保存在與程序相同的目錄中。

+0

哇這個作品,謝謝!那麼不完整,看看我的編輯。 – dav1d

+0

我明白了!在我的程序中加載awesomium之前,我可以設置'LD_LIBRARY_PATH'。 – dav1d

+0

您應該傳遞'-Wl,-rpath ='$ ORIGIN''而不是'-Wl,-rpath = .',而LI_LIBRARY_PATH將無用。 – Julien

1

這個錯誤是因爲。不在你的道路上。正如你所說的,你的選擇是分配一個bash腳本,該腳本運行LD_LIBRARY_PATH設置的二進制文件,或者將共享對象複製到/ usr/lib或/ usr/local/lib或適用於該特定平臺的任何位置。

真的沒有捷徑,除非你想靜態鏈接。

+0

是的,我想避免這兩種方式。謝謝你明確表示沒有別的辦法。靜態鏈接不起作用,因爲awesomium沒有靜態庫(封閉源代碼,只提供了.so) – dav1d