2011-05-09 73 views
1

我正在編譯源程序,它沒有找到一些與它一起編譯的動態庫。這是我運行可執行文件時的輸出。 (它編譯罰款)與共享庫有一些問題

dyld: Library not loaded: libipeqtcanvas.so.7.0.14 
    Referenced from: /Users/zrbecker/testipe/bin/./ipe 
    Reason: image not found 
Trace/BPT trap 

我的問題是,我知道-L發現庫在編譯,但我怎麼保證運行時,該程序可以找到這些庫。

這些庫位於bin目錄中的可執行文件的相對路徑../lib中。

+0

編譯過程創建一個可執行文件,其中包含有關庫的所有信息。它在編譯期間得到了很多。因此,如果您要在提到的路徑中包含庫的計算機上創建可執行文件,則一切都應該正常運行。但是,將該二進制文件運行並將其運行到其他地方(庫不可用)可能是一個問題。 – Sriram 2011-05-09 10:29:32

+1

C或C++?選一個。實際上,這聽起來與此無關。 – 2011-05-09 10:48:04

回答

2

您可以在運行時設置LD_LIBRARY_PATH(或實際上,因爲您在OS X上,因此您需要DYLD_LIBRARY_PATH)以包含庫目錄。

export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/path/to/lib"

+0

真棒這個工程,但有沒有辦法在編譯時處理它? – zrbecker 2011-05-09 10:39:40

+0

只是一個補充。我試圖將所有內容都打包到應用程序包中,因此這些庫將位於該包內,並可能會移動。 – zrbecker 2011-05-09 10:41:44

+0

我想你可以在路徑中包含'@ executable_path'來引用可執行文件的運行時路徑。 – James 2011-05-09 11:23:45