2010-09-09 106 views
6

我是Qt新手,但在C++中沒有問題。我使用了Qt Creator並用一個按鈕(如hello world)製作了一個簡單的程序,然後構建了該項目。我是不是能夠運行在Windows本身的可執行文件(創建者外),因爲它需要這些DLL文件:170 MB Hello World - >用Qt部署應用程序

libgcc_s_dw2-1.dll 
mingwm10.dll 
QtGuid4.dll 
QtCored4.dll 

我發現這些文件,並把他們的exe旁邊。現在該程序可以正常工作,但該文件夾的大小爲170 MB,因爲大的 Dll文件。這是部署Qt應用程序的一種方式。我知道他們是製作獨立靜態應用程序的一種方式,但這不是問題。我對dll很好,但依賴關係似乎太大了。是否有不同的方法來部署較小文件大小的項目?

感謝

+3

您是否嘗試過發佈qt dlls版本? – 2010-09-09 09:47:03

+0

是的,但它說:「程序入口點_Z5qFreePv不能位於動態鏈接庫QtCore4.dll中」。然後我在這個文件夾中找到了另外一個QtCore4.dll:/ qt/bin,然後用它說:「程序入口點1QSettings @@ UAE @ XZ不能位於動態鏈接庫QtCore4.dll中。 – Auxiliary 2010-09-09 09:54:17

+4

我認爲你需要在發佈模式下編譯你的應用程序才能使用Qt dll的發佈版本。 – tibur 2010-09-09 10:12:14

回答

17

爲什麼不做一個發佈版本並使用發行版DLL而不是更大的調試DLL。

由於這是關於尺寸:

調試庫

QtCored4.dll =〜37MB

QtGui4d.dll =〜157MB

推出庫

QtCore.dll = 〜2.3Mb

QtGui4.dll =〜9MB

(通過查看我的Qt \ version \ bin目錄中的大小)

+0

在我發佈此消息之前,沒有在原評論中提到這一點。但這是對這個問題的有效答案,所以我相信它應該放在這裏... – radix07 2010-09-09 13:10:34

3

你這裏有兩個問題:

  • 「程序的入口點未找到」:你有Qt庫的多個版本安裝。不好。您正在鏈接到導入庫A,而在運行時您的可執行文件會找到一個dll B,這不是您鏈接的鏈接。鏈接時檢查您的項目輸出以查看VS使用哪個導入庫。最簡單的解決方案:刪除/卸載與Qt相關的所有內容,並從頭開始。同樣調整您的項目設置。
  • 沒有找到在運行時動態鏈接庫的解決方案是使用Qt的dll目錄添加到您的PATH
+0

儘管當DLL本身爲170 MB時,這並沒有幫助分發問題。 – 2010-09-09 14:23:36

+0

我知道;其他人已經指出,這是因爲調試版本,所以我沒有重複這些信息.. – stijn 2010-09-09 14:44:29

+0

「你已經安裝了多個版本的Qt庫」 - 你能給出一個解決方案。我正在使用QtSDK,我有4.7 4.7 – Dewsworld 2012-06-23 13:40:47

1

如果您計劃部署一個Qt應用程序的靜態鏈接的版本,你應該考慮構建庫的自定義版本您不需要disable all the features,從而最大限度地減少了庫的大小。

+5

靜態鏈接需要合適的商業Qt許可證FWIW。 – Rob 2010-09-09 12:11:34

+1

@Rob:Qt在LGPL下可用,只要你的應用程序是LGPL,你也不需要商業許可來靜態鏈接它。然而,還有很多其他問題,如在這裏陳述:http://doc.qt.nokia.com/4.6/deployment.html – 2010-09-09 16:07:37