2017-04-14 302 views
1

我的任務是在沒有安裝Qt的計算機上的Windows項目中使用我的庫。所以我想用靜態鏈接的Qt代碼編譯我的庫。QT靜態庫靜態編譯

我不明白如何編譯我自己的代碼到一個靜態庫,靜態地鏈接所有Qt的東西。我已經下載了Qt源文件,並且使用msvc 2015靜態編譯(QT 5.8.0),並在Qt Creator中添加了新的靜態qmake補全。我試圖建立我的庫,它成功了,但在其他計算機上使用它,沒有安裝Qt,得到許多鏈接器錯誤LNK2001LNK2019

這是一個錯誤的例子:

Error LNK2019 Unresolved External Symbol "public: int __thiscall 
QJsonValue::toInt(int)const " ([email protected]@@[email protected]) in function 
"public: int __thiscall QJsonValueRef::toInt(void)const " 
([email protected]@@QBEHXZ) ConsoleApplication2 c:\Users\Alex\documents\visualstudio 
2015\Projects\ConsoleApplication2\ConsoleApplication2\TcpClient.lib(tcpthreadpart.obj) 

所以,據我所知,所有的Qt源並沒有鏈接到我的圖書館。在互聯網上有一些指導如何編譯一個.exe與靜態鏈接的QT,我試過他們編譯我的庫,但它失敗了。能否請你幫忙?

回答

0

庫本身必須是一個動態庫,因爲這是現有工具可以與任何東西鏈接的唯一類型。當你針對靜態Qt構建庫時,庫會根據需要靜態使用Qt。

看起來你已經構建了一個靜態庫,因此沒有將它「鏈接」到任何東西。從技術上講,這是可能的,但沒有工具可以做到這一點:(