Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Windows上编译静态QT应用程序_C++_Qt_Static Libraries_Dll - Fatal编程技术网

C++ 在Windows上编译静态QT应用程序

C++ 在Windows上编译静态QT应用程序,c++,qt,static-libraries,dll,C++,Qt,Static Libraries,Dll,我是QT新手,我很享受这种体验,除了我无法将QT库静态链接到输出二进制文件之外。当我在QT目录外运行输出文件时,我得到程序无法启动,因为缺少QtCored4.dll。显然,QT正在动态链接它们的库,并请求一个我没有的.dll。有没有办法将QT的库静态编译成静态二进制文件,这样就不需要QT的DLL了?我这样问是因为我的项目已经达到了11.dll,我真的很想减少必须随软件分发的文件量。尺寸对我来说不是问题。谢谢 我尝试将CONFIG+=static添加到.pro文件中,但没有效果。首先,除非您购买了

我是QT新手,我很享受这种体验,除了我无法将QT库静态链接到输出二进制文件之外。当我在QT目录外运行输出文件时,我得到
程序无法启动,因为缺少QtCored4.dll
。显然,QT正在动态链接它们的库,并请求一个我没有的.dll。有没有办法将QT的库静态编译成静态二进制文件,这样就不需要QT的DLL了?我这样问是因为我的项目已经达到了11.dll,我真的很想减少必须随软件分发的文件量。尺寸对我来说不是问题。谢谢


我尝试将
CONFIG+=static
添加到
.pro
文件中,但没有效果。

首先,除非您购买了商业许可证,否则无法静态链接Qt。这样做会使您违反LGPL许可证,非商业版本是根据LGPL许可证分发的。我感觉到了你的痛苦,我的软件中有很多DLL

谢天谢地,如果您使用安装程序,您可能确实拥有DLL:您不需要从源代码构建,这应该是自动完成的。您将在Qt\Version\bin中找到它们,其中Qt是您安装Qt的目录,Version是您安装的Qt的版本。例如,我的在G:\Libraries\Qt\4.7.1\bin中找到

然而,我确实有一些问题,没有一个DLL的建立-一个与OpenGL的工作-并执行了重建这样做。当我切换Visual Studio的版本时,我也这样做了。我认为这样做很方便,很容易,在Qt目录中打开一个终端,然后执行:

configure.exe -platform XXX'
其中XXX表示要执行的构建类型。有效选项包括win32-msvc2005、win32-msvc2008、win32-msvc2010。因此,我使用:

configure.exe -platform win32-msvc2010'
其他选项也有详细说明。如果您下载了源代码,则这些说明适用,但是您可能必须将当前目录添加到path变量,如下所示:

set PATH=%cd%\bin;%PATH%

整个过程大约需要一个小时。

首先,除非您购买了商业许可证,否则无法静态链接Qt。这样做会使您违反LGPL许可证,非商业版本是根据LGPL许可证分发的。我感觉到了你的痛苦,我的软件中有很多DLL

谢天谢地,如果您使用安装程序,您可能确实拥有DLL:您不需要从源代码构建,这应该是自动完成的。您将在Qt\Version\bin中找到它们,其中Qt是您安装Qt的目录,Version是您安装的Qt的版本。例如,我的在G:\Libraries\Qt\4.7.1\bin中找到

然而,我确实有一些问题,没有一个DLL的建立-一个与OpenGL的工作-并执行了重建这样做。当我切换Visual Studio的版本时,我也这样做了。我认为这样做很方便,很容易,在Qt目录中打开一个终端,然后执行:

configure.exe -platform XXX'
其中XXX表示要执行的构建类型。有效选项包括win32-msvc2005、win32-msvc2008、win32-msvc2010。因此,我使用:

configure.exe -platform win32-msvc2010'
其他选项也有详细说明。如果您下载了源代码,则这些说明适用,但是您可能必须将当前目录添加到path变量,如下所示:

set PATH=%cd%\bin;%PATH%

整个过程大约需要一个小时。

您需要下载QT的源数据包并编译它。这需要一些时间,但并不复杂

  • 下载并解压缩QT源代码
  • 启动编译器外壳程序(Visual Studio或mingw)
  • 在QT源目录中执行configure-在此处添加静态编译标志
  • 执行make(Visual Studio nmake)
  • 根据机器的速度,等待几个小时

您需要下载QT的源数据包并进行编译。这需要一些时间,但并不复杂

  • 下载并解压缩QT源代码
  • 启动编译器外壳程序(Visual Studio或mingw)
  • 在QT源目录中执行configure-在此处添加静态编译标志
  • 执行make(Visual Studio nmake)
  • 根据机器的速度,等待几个小时

我不知道LGPL限制的静态链接会进一步加剧我对GPL\LGPL许可证的憎恨。除了愤怒,我会像你说的那样包括所有DLL。这可能看起来很傻,但有没有办法将所有QT DLL合并成一个?@user99545这是一种痛苦,但这是我们为使用数千小时的免费工作所付出的代价:)。唯一愚蠢的问题是那些你没有问的问题,尽管把它们合并成一个会是一个该死的大DLL!我很确定这件事还没有完成,也不可能。我通常把我所有的DLL都放在一个DLL目录中。当我需要查找正在使用的内容时,我会在分发之前修剪列表以删除未使用的DLL。提示不错,工具链接+1。@user99545非常欢迎。另一个使用DLL的工具可能会让你感兴趣,它让你看看从DLL导出了什么函数:如果你像插件一样动态加载它们,那么它非常方便,而且它们会让你感到痛苦。“首先,除非你购买了商业许可证,否则你不能静态链接Qt。”这不是完全正确的。您必须允许最终用户重新链接到另一个版本的Qt,例如通过提供对象文件。我不知道LGPL限制的静态链接会进一步加剧我对GPL\LGPL许可证的憎恨。除了愤怒,我会像你说的那样包括所有DLL。这可能看起来很傻,但有没有办法将所有QT DLL合并成一个?@user99545这是一种痛苦,但这是我们为使用数千小时的免费工作所付出的代价:)。唯一愚蠢的问题是那些你没有问的问题,尽管把它们合并成一个会是一个该死的大DLL!我很确定这件事还没有完成,也不可能。我通常把我所有的DLL都放在一个DLL目录中。当我需要的时候