簡體   English   中英

跨平台分發Qt / C ++應用程序

[英]Distributing Qt/C++ application cross-platform

我正在努力部署Qt / C ++應用程序,可能是因為我沒有在網上找到關於此的很好的介紹。 簡而言之,我的問題是如何設置安裝框架,該框架在交付給用戶之前只需要最少的編譯,或者最好是不需要編譯

我想將GUI部署到不同平台上的用戶,這些用戶可能會或可能不會在其計算機上擁有管理員權限。 我找到了不同的選擇:

  • 靜態編譯Qt->靜態編譯可執行文件->分發可執行文件。 通過此設置,我遇到了Windows安全警告,該警告需要管理員權限(我尚未在Linux / macOS上嘗試過)。 坦率地說,這種方法似乎不是最優的,因為我的編譯器不知道如何為用戶優化編譯。

  • 創建一個安裝程序。 但是,我開始感到困惑...是否需要提供GUI的靜態編譯的可執行文件,還是僅提供安裝程序的可執行文件,或者都不提供? 還是可以通過使用帶有內置編譯器/庫的Qt安裝程序來避免一起進行預編譯?

顯然,您需要在要將其分發到的每個平台上構建應用程序。 最簡單的方法是將所有QT庫動態鏈接到您的應用程序。 之后,您所要做的就是提供您的應用程序(如Windows上的exe文件,或Linux上的可執行文件等)和您使用的QT庫(Windows上的DLL,我認為是Linux上的SO文件)

例如(在Windows上),如果您的應用程序名為MyApp並使用QTGui,QTWidgets和QTNetwork,則您可以分發以下文件:

  • MyApp.exe的
  • QTCore.dll和一些其他需要稱為icu * .dll的DLL,不記得了)
  • QTGui.dll
  • QTWidgets.dll
  • QTNetwork.dll

您可以將它們全部壓縮為一個zip,創建安裝程序等。

編輯注釋中的后續操作后,很少注釋。

標准庫(稱為具有vector類的默認庫)是c / c ++運行時的一部分(在Windows上)或安裝在linux系統等上,因此不,您不必為此擔心。 我不能對所有編譯器都說,但是對於某些編譯器,您可以指定一個標志/參數來靜態鏈接此運行時(很少需要這樣做)。

在Windows上,有一個名為“依賴關系遍歷”的工具,該工具為您提供了運行該應用程序所需的所有DLL的列表。 在我不知道的linux系統上,真的不需要一個。 但是對於您自己的應用程序, 您確實知道需要哪些庫,因為您已經編寫了它:)

使用此設置,我遇到了Windows安全警告

您沒有簽署二進制文件。 這個問題與Qt無關。 即使分發瑣碎的“ Hello World”,您也將面對它。

確保您簽署以下所有條件

  1. 可執行文件。

  2. 您重新分發且未簽名的所有DLL(請驗證每個DLL)。

  3. 安裝程序。

我的編譯器不知道如何為用戶優化編譯。

由於C ++不使用即時編譯,因此此聲明是不言而喻的。 當您動態鏈接到編譯器時,如果您暗示需要特定於CPU的代碼變體,則“不知道”如何“為用戶優化”編譯。 必須通過具有多個可執行文件(分別針對特定的CPU編譯)並在安裝時選擇它們來解決此問題。 不過,我認為您不是那個意思。 但是,我不知道“為用戶優化編譯”的含義。

我是否需要提供GUI的靜態編譯的可執行文件

由你決定。 如果不提供靜態編譯的可執行文件,則需要提供所有依賴項:編譯器的C ++運行時以及Qt所需的所有庫和插件。

在Windows,Linux和OS X上生成靜態鏈接的可執行文件的過程是相同的。 首先從靜態配置的Qt副本開始( configure -static -static-runtime ),然后構建它,然后使用它來構建您的應用程序。 最終產品將與C ++運行時和Qt庫靜態鏈接。

我是否需要提供安裝程序的靜態編譯可執行文件?

僅當您使用C ++編譯器自己編譯安裝程序時。 大多數安裝程序生成器軟件包負責創建沒有其他依賴項的安裝程序,即,您可以在裸機Windows系統上運行它。

我可以通過使用Qt的安裝程序來避免在我這邊一起進行預編譯

Qt沒有提供預建的安裝程序以供重復使用。

您可以使用例如NSIS來部署編譯器運行時,Qt庫和插件以及您的應用程序和所需的任何數據文件。

或者,您可以靜態地編譯您的應用程序,使其沒有依賴項,並且是單個.exe文件,並將其作為可移植應用程序使用。 它還可以自我安裝,即您可以將安裝程序捆綁在應用程序中,並且在啟動時,應用程序可以檢測到它是否已經安裝,如果沒有安裝,它將以管理模式重新啟動並執行安裝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM