2014-11-01 176 views
-1

我決定嘗試使用Qt進行編程,因爲我想用我的應用程序本地編寫的語言製作GUI應用程序。我下載了Qt,觀看了一些教程,並製作了一個簡單的Hello World應用程序。然而,當我試圖展示我的朋友時,他抱怨缺少DLL。快速前進,最終我找到了一個自動包含Qt需要的所有依賴的工具。Qt - 如何減少「捆綁」的大小?

所以我的問題:

enter image description here

我真的需要包括所有這一切,當我發佈我的應用程序?這是我付出了不使用C#和通過DLL調用我的應用程序函數的價格嗎?我正在編寫的實際應用程序僅編譯爲大約100kb,我是否真的需要在依賴項中包含超過44x的應用程序?

+4

你確實意識到.Net Framework比這個大得多,但它也必須安裝。嘗試運行沒有.Net框架的C#應用​​程序,然後找到所有依賴關係。 – 2014-11-01 01:14:08

+1

然而,你可以通過用'-no-icu'重新編譯Qt來擺脫一些依賴,比如icu。 AFAIK,icu僅用於QtWebkit模塊。 – Slyps 2014-11-01 01:22:19

+0

@MichaelPetch大多數人已經安裝了.Net框架。如果他們不這樣做,那麼通常不會要求讓他們安裝它。但是,有了這個,我不得不用一個應用程序來分發所有這些文件。這是我的主要投訴。我已經設法削減它實際上需要我分配的數量,但它仍然非常龐大。 – 2014-11-01 01:27:23

回答

0

是的,總之,你的觀察是正確的。 Qt並不是用於GUI目的的最小框架。

即使QtCore庫越來越4-5 MB,這些天,更不用說其餘的像QtGUI,特別是如果你使用QtWidgets等

如果你真的成更小的東西,你可以尋找替代框架更小。我個人比較喜歡fltk,儘管我不得不根據自己的需要調整它以適合幀緩衝區。不過,這可能不在您的視線之內。

你還可以看看的一件事是在Qt中建立的功能系統。這意味着您可以關閉您不打算使用的功能。免責聲明是,如果你決定以這種方式走下坡路,那麼你是獨立的。

有人認爲靜態鏈接也會爲你帶來很多好處。我已經嘗試在過去相當多了一點,但同時它並沒有配備巨大的改進,它也配備了這些缺點:

  • 您需要重新部署應用程序時,你想更新的Qt。顯然,這不是一個特例,因爲修正錯誤很好,只適用於其中之一。

  • 即使您獲得了一點體積的改善,當您開始部署多個Qt應用程序時,您將會失去這一點。

  • 你可以很容易地陷入法律糾紛,特別是如果你正在編寫專有軟件,而這又不是特例。

  • 在所有情況下都不是那種直接鏈接靜態的。

因此,最好在Qt中使用爲此目的而建立的特徵系統。

話雖如此,爲了這個目的,還有更大的框架只是爲了嚇跑你。儘管如此,Qt並不是你將要放在具有非常有限的閃存和RAM的8位微控制器上的東西。

所以我的建議是要麼習慣於現狀或逃避。

2

可以靜態編譯Qt的,那麼當你對靜態庫鏈接您造成execurable都將是:

  • 自包含的,不需要dll的
  • 小得多

編譯Qt靜態需要很長時間。如果您爲了商業目的而靜態鏈接,您還必須考慮Qt的許可證。

+0

我看不出這對OP有何幫助。靜態鏈接不會自動裁剪掉功能! OP的問題似乎與自動化工具無關,因爲它無關您分發的文件數量。 OP的有效擔憂在於Qt是一個巨大的野獸。 – lpapp 2014-11-01 13:25:02

+0

@lpapp:DLL包含所有導出的函數和任何導出使用的所有函數。當靜態鏈接時,鏈接器將只保留程序所使用的函數並丟棄其餘部分。當然,這可能與程序實際使用的內容不一致,如果有一些註冊表,所有小部件都被添加到需要或不需要的註冊表中。 – 2014-11-01 13:35:54

+0

@Ben:查看我的答案瞭解詳情。 – lpapp 2014-11-01 14:09:21