我很难部署我的Qt/C++应用程序,可能是因为我还没有在网上找到一个很好的介绍。简单地说,我的问题是如何在发送给用户之前设置一个只需要最少编译,或者最好是不编译的安装框架。
我希望将GUI部署到不同平台上的用户,这些用户可能拥有或可能没有他们的计算机上的管理权限。我找到了不同的选择:
发布于 2017-05-09 12:44:23
使用此设置,我遇到了Windows安全警告
你没有在二进制文件上签名。这个问题与Qt无关。即使在分发一个微不足道的"Hello“时,你也会面对它。
确保您签署了以下所有:
我的编译器不知道如何为用户优化编译。
由于C++不使用即时编译,所以这句话是不言而喻的.当您动态链接时,如果您暗示您需要特定于CPU的代码变体,编译器也将“不知道”如何“为您的用户最佳地编译”。这必须通过拥有多个可执行文件来解决,每个可执行文件都是为特定的CPU编译的,并在安装时选择它们。不过,我觉得你不是那个意思。但是,我不知道您所说的“为我的用户进行最佳编译”是什么意思。
我需要提供我的GUI静态编译的可执行文件吗?
由你决定。如果不提供静态编译的可执行文件,则需要提供所有依赖项:编译器的C++运行时以及Qt所需的所有库和插件。
在Windows、Linux和OS上生成静态链接的可执行文件的过程是相同的。首先是静态配置的Qt (configure -static -static-runtime
)副本,然后构建它,然后使用它构建应用程序。最终产品将静态地链接到C++运行时和Qt库。
我需要提供一个静态编译的可执行文件吗?安装程序
只有当您使用C++编译器自己编译安装程序时。大多数安装程序生成器包负责创建一个没有附加依赖项的安装程序,即您可以在一个单独的Windows系统上运行它。
我是否可以通过使用来自Qt的安装程序来避免在我的身边进行预编译?
Qt不提供可重复使用的预构建安装程序。
您可以使用例如NSIS来部署编译器运行时、Qt库和插件,以及您的应用程序和它需要的任何数据文件。
或者您可以静态地编译应用程序,以便它没有依赖关系,并且是一个.exe文件,并将其作为可移植的应用程序使用。它也可以自动安装,也就是说,您可以将安装程序捆绑在应用程序中,并且在启动时应用程序可以检测它是否已经安装,如果没有,它将以管理模式重新启动自己并执行安装。
发布于 2017-05-09 06:34:21
显然,您需要在要将其分发到的每个平台上构建应用程序。最简单的方法是将所有QT库动态链接到应用程序。在此之后,您所需要做的就是提供您的应用程序(如windows上的exe文件,或linux上的可执行文件等)和您使用的QT库( windows上的DLL,所以我认为是linux上的文件等等)。
例如,(在windows上)如果您的应用程序名为MyApp,并使用QTGui、QTWidgets和QTNetwork,那么您可以分发以下文件:
您可以将它们全部压缩在一个zip中,创建一个安装程序等等。
编辑后,在评论的后续几个注意事项。
标准库(您称之为具有vector
类的默认库)是c/c++运行时(在windows上)的一部分,或者安装在linux系统上等等,所以不需要担心这一点。我不能说对于所有编译器,但是对于某些编译器,您可以指定一个标志/参数来静态地链接这个运行时(很少需要这样做)。
windows上有一个名为dependency的工具,它给出了应用程序运行所需的所有all列表。在linux系统上,我不知道,从来没有真正需要一个。但是对于您自己的应用程序,您确实知道需要哪些库,因为您编写了:)
https://stackoverflow.com/questions/43862542
复制相似问题