2011-11-29 107 views
13

我一直在網上搜索一些有用的和明確的信息,這很煩人,這樣一個微不足道的事情是很難做到的。如何爲Qt應用程序創建可執行文件?

我需要的是爲我的Qt項目創建一個可執行文件,以便在其他計算機上運行它。我的項目在Qt Creator中運行得很好,但是當我嘗試運行在release文件夾中創建的可執行文件時,我得到了關於某些dll缺失的錯誤,儘管我已經將它們全部放在我的.exe的同一目錄中,但現在我得到了一些有關DLL中的過程入口點錯誤(QtCore4.dll)的錯誤。

該解決方案看起來像一個靜態鏈接,我發現了很多關於它的信息,但沒有一個真正幫助我。這是我迄今爲止所嘗試的:

  • 如上所述使用在release文件夾中創建的可執行文件。
  • 靜態鏈接,遵循本教程(和其他許多內容幾乎完全相同):http://doc.qt.io/qt-4.8/deployment-windows.html但在「configure -static」期間出現以下錯誤:NMAKE:致命錯誤U1077:'「c:\ Arquivos de programas \ Microsoft Visual Studio 9. 0 \ VC \ BIN \ cl.EXE「':返回碼'0x2' 停止。 大廈QMAKE失敗,返回碼2

對於我找不到任何解決方案,所以我在這裏,只是想創建我的Qt項目的可執行文件,希望你們能在這裏給我一些光。

+0

請參閱此相關的問題http://stackoverflow.com/questions/1011197/qt-static-linking-and-deployment/1654833#1654833 –

+0

我之前發現它,但我得到了錯誤 NMAKE:致命錯誤U1077:'「c:\ Arquivos de programas \ Microsoft Visual Studio 9.0 \ VC \ BIN \ cl.EXE」':返回代碼'0x2'停止。建立qmake失敗,返回代碼2 當我嘗試運行配置,我無法找到答案。 但謝謝。 –

回答

14

基本上你必須尋找深入QT樹,其中qt實用程序駐留,並複製所需的DLL的mingw子文件夾。

這些是我遵循的基於QT 4.7.4的步驟,用於將應用程序打包到正確的共享庫。

  1. 假設你已經在C安裝QT:\ QTSDK
  2. 打開您的項目,並在釋放模式編譯。
  3. 轉至此目錄:C:\ QtSDK \ Desktop \ Qt \ 4.7.4 \ mingw \ bin - 它包含所有共享庫。調試庫以「d」端 - FREX,QtCore.dll是發行版,而QtCoreD.dll是調試版本
  4. 複製至少這些文件到你的發佈目錄(其中您的.exe謊言)

    • mingwm10.dll
    • libgcc_s_dw2-1.dll
    • QtCore4.dll
    • QtGui4.dll

    我只是用這種方式構建,測試並部署了一個虛擬項目。

+1

我沒有該目錄(mingw \ bin),可能是因爲我正在使用Visual Studio? 無論如何,我從那裏複製所有的dll文件到我的.exe文件,它的工作。它不是最好的解決方案,但它現在可以工作。謝謝。 –

+1

您可以開始逐個刪除dll文件,並檢查程序是否仍在運行。這樣你可以很容易地找出哪些是需要的。這就是我通常在處理DLL依賴時所做的事情。 – sashoalm

+0

我不知道你是否在VS2008中配置.PRO文件,但是某些qt功能需要它們自己的dll。 (QtSql等)。大多數情況下,只需使用QtCore.dll和QtGui.dll即可。當您使用網絡通信,sql,webkit等高級功能時,請檢查文檔:您可能會得到指向所用庫的指針。您還可以使用Dependency Walker來查看您的exe需要什麼DLL。 –

1

因此,您下載了Qt SDK,並且想要將Qt庫靜態鏈接到您的應用程序中,對嗎?

首先,如果您靜態鏈接,則不需要任何Qt * .dll,因爲它已內置到應用程序中。因此,這意味着您的應用程序是使用動態鏈接構建的。

從我的經驗,最安全的方式得到這一切的工作是:

下載Qt的根源,建立與NMAKE安裝它們(使用Visual Studio命令提示符,從菜單開始 - >應用程序 - > Visual Studio 2008中) 。請記住,靜態鏈接應用程序的大小取決於* .libs的大小,並且這些取決於預構建配置,例如,通過關閉某些功能可以最小化應用程序的大小(這是比如說配置用於MacOSX的,只是看出來具體的那些適用於Windows,並添加適當的plaftorm - 見configure.exe --help瞭解詳細信息):

./configure -arch x86 -platform macx-g++ --universal -cocoa -debug-and-release -opensource -static -fast -no-accessibility -no-sql-sqlite -no-qt3support -no-opengl -no-openvg -qt-zlib -no-gif -no-libmng -qt-libmng -no-libtiff -qt-libjpeg -no-3dnow -sse -no-sse2 -no-openssl -no-dbus -no-phonon -no-multimedia -no-audio-backend -webkit -no-script -no-scripttools -no-declarative -nomake demos -nomake examples -no-exceptions -no-accessibility -confirm-license 

安裝,設置和使用Visual Studio插件爲您的Qt項目(here) 。

祝你好運! :)

+0

請注意,靜態鏈接需要許可證或您的代碼是開源的。 – paulm

+0

@paulm爲什麼靜態鏈接需要許可證?這是從Qt具體? (我是新的,所以問) – inblueswithu

+0

它的LGPL/GPL許可證授權,在這裏搜索SO找到細節 – paulm

2

下面是我做了一些工作後,我確定你的程序是在Qtcreator內建立的,進入包含你的exe的目錄並雙擊它(我正在使用窗口,不知道它是否在其他平臺上是相同的)。一個窗口應該彈出告訴你哪個.dll丟失。轉到安裝Qt的目錄並在搜索欄中鍵入確切的名稱(右上角Windows 7)和dll應顯示在搜索結果中。右鍵單擊並選擇打開的文件位置。複製exe文件所在的位置。雙擊exe文件。如果缺少另一個.dll文件,則重複同樣的操作,直到無失蹤。最後你的程序應該運行。 希望這有助於。

相關問題