2011-11-20 91 views
2

我一直在用Qt做個人項目中的一些有趣的東西。我不是這方面的專家,所以如果這是一個愚蠢的問題(猜不是我找不到有用的東西),隨時可以殺死我。C++ Qt:靜態構建和外部dylibs

不管怎麼說,我在OSX,通常我使用shell腳本用以下命令編譯最終版本的Qt針對的靜態版本:

cd "project folder..."; 
PATH=/Users/TCB13/(...)/qt-source/bin:$PATH; --> Path to my static QT. 
export PATH; 
qmake -config release; 
make; 
make clean; 

到目前爲止,如果我將編譯的二進制到另一臺計算機沒有安裝Qt,一切正常! ;)

昨天我開始玩一個公司提供的動態庫,我已經將dylib包含在我的.pro文件中,如下所示:(我有一個項目文件夾中的dylib副本)

#macx: LIBS += -L$$PWD/ -lwpsapi 

#INCLUDEPATH += $$PWD/ 
#DEPENDPATH += $$PWD/ 

當我編譯「靜態」(使用上面的命令)和另一臺計算機上運行它,我得到:

dyld: Library not loaded: @executable_path/libwpsapi.dylib 
Referenced from: /Users/TCB13/Desktop/dude111 
Reason: image not found 
Trace/BPT trap: 5 

我發現我的編譯的二進制文件的大小是相同的或沒有包括dylib所以,我googled如何包括和外部自由和有些人是sa因爲我需要在我的.pro文件中添加「CONFIG + = static」。我做到了,文件的大小增加了,但我仍然得到了同樣的錯誤。

希望有人能幫助我。

回答

2

錯誤信息非常清楚,您需要將libwpsapi.dylib與您的應用程序一起分發。如果您想避免這種情況,請參閱此第三方庫的文檔以使其使用靜態鏈接的代碼。請注意,您告訴鏈接器鏈接靜態庫的事實並不意味着代碼被引用。我懷疑代碼中有某種預處理器#define(或默認情況下)使用動態加載的庫。

+0

嗯...圖書館的文件不包括這...我覺得奇怪的是,當我添加了'CONFIG + = static'到.pro文件最終的應用程序是1.4Mb更大的女巫是大小dylib文件...謝謝。 – TCB13

+0

這可能是這樣,但dylib文件不是靜態鏈接的。如果您使用的是gcc工具鏈,則需要.a文件。 –

+0

感謝提示。我會嘗試檢查更「靜態」的解決方案...;) – TCB13