2010-11-30 61 views
1

我成功地能夠編譯和運行我的Qt應用程序。但是,當我將.exe文件移動到其原始路徑之外時,我發現必須手動複製Qt DLL(例如mingw10.dll,qtcore4.dll)。有沒有任何動態的方式來鏈接這些庫與我的應用程序?編譯Windows的Qt應用程序的分佈

回答

4

我想你的意思是你想「靜態」鏈接這些庫與您的應用程序。 基本上這意味着所有的東西都會在你的exe文件中滾動,而且你不再需要這些dll。

有對靜態鏈接的優點,但也有缺點。你應該絕對確定這是你在這樣做之前想要做的事情。

看看這個鏈接,深入闡述Dynamic Linking vs Static Linking

至於你的具體問題的區別,如果你一定要使用靜態鏈接時,你將不得不改變你的Qt設置靜態地建造。默認情況下,Qt分配設置爲使用動態鏈接。有一個方便的指南here

基本上當你設置你必須運行「配置-static」改變所有的項目設置,而不是使用動態鏈接靜態鏈接的版本。然後再次構建Qt。

您還應該驗證您的Qt許可證。如果您使用的是Qt LGPL許可證,並且想要靜態鏈接,則必須包含MihaiLimbăşan在其評論中明智解釋的所有對象文件(.o和.obj)。如果你已經購買並支付Qt,那麼你沒有問題。

+0

靜態鏈接不違反LGPL這樣,但你必須提供您的應用的.o/.OBJ文件,以便最終用戶可以通過不同的(兼容)的Qt版本,把你的目標文件重建工作的可執行文件。有關更多詳細信息,請參閱此處:http://stackoverflow.com/questions/2945612/2946131#2946131 – 2010-11-30 20:15:43

2

如果DLL是在PATH的應用程序,那麼他們將被找到和工作。因此,您可以將您的Qt二進制文件/ dll添加到%PATH%環境變量中。如果你要爲你的應用程序創建一個安裝程序,你需要將這些庫打包,以便它們位於bin目錄中 - 否則你將不得不期待每個用戶都安裝並可能自己編譯Qt(提示:去的第一個選項:))