Ala*_*lah 30 c++ qt qt5 visual-studio-2012
我是使用Qt的新手,我不知道很多东西.
作为测试,我使用基于最新Qt5.1的Visual Studio 2012和Qt-VS-Add-in 创建了一个简单的应用程序
在我编译应用程序之后,它对我不起作用(给出错误),我在互联网上搜索并发现很多人说我必须从目录中复制下面提到的那些dll:
C:\Qt\Qt5.1.0\5.1.0\msvc2012\bin\
Run Code Online (Sandbox Code Playgroud)
DLL我必须复制才能使我的应用程序工作:
icudt51.dll
icuin51.dll
icuuc51.dll
libEGL.dll
libGLESv2.dll
Qt5Core.dll
Qt5Gui.dll
Qt5Widgets.dll
Run Code Online (Sandbox Code Playgroud)
我的问题是这些dll的大小,它们大约是"37 MB"而我的应用程序本身只是"30 KB"!所以,那些Qt库将为我的应用程序添加至少37 MB [我不认为它与我下载的其他基于Qt的应用程序一起发生].有没有什么解决方案可以让我最终得到一个小的.exe文件?!
我听到有些人说我必须为Microsoft C++编译器添加一个dll,你能为我解释一下吗?
注意:我在StackOverFlow上遇到了很多问题,但我找不到任何可以帮助我的东西,所以请不要将其标记为重复,因为如果我找到了明确的答案,我就不会发布这个问题!
任何帮助,将不胜感激.
phy*_*att 25
更新:使用windeployqt.exe!它工作得很好.
http://doc.qt.io/qt-5/windows-deployment.html#the-windows-deployment-tool
使用windeployqt最简单的方法是将Qt安装的bin目录(例如)添加到PATH变量中,然后运行:
Run Code Online (Sandbox Code Playgroud)windeployqt <path-to-app-binary>
更新:经过进一步测试,windeployqt没有为我复制所有的MingW dll.(使用MingW 4.9.1在Windows 10上使用Qt 5.4进行测试).因此,您需要在部署之前手动获取最后3个dll:
libgcc_s_dw2-1.dll
libstdc++-6.dll
libwinpthread-1.dll
Run Code Online (Sandbox Code Playgroud)
从
C:\Qt\5.4\mingw491_32\bin
Run Code Online (Sandbox Code Playgroud)
我想你的列表中可能还有一些额外内容...我会仔细查看下面链接中的文档...
以下是关于它的权威文档:
http://doc.qt.io/qt-5/windows-deployment.html
http://doc.qt.io/qt-5/windows-deployment.html#application-dependencies
令人惊叹的Qt Libraries可以做很多事,但它们有点大.一些旧版本的Qt可能会小一些.
对于Qt 4.8,msvc QtCore4.dll为2.5 MB,QtGui4.dll为8.4 MB.
以下是Windows在运行时跟踪库的方式:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx
如果你静态链接,那么你的EXE应该抓住它需要的库并构建到一个独立的exe中.它仍然可能依赖于msvc可再发行组件.有关它的更多信息,请参阅下一节.但它现在编译.lib你引用到EXE中的s,你的exe不再指向其他动态链接的库.获取静态链接的exe环境设置确实需要更多时间.
您的exe肯定会变大,因为它现在包含您之前引用的库的二进制信息.
https://www.google.com/search?q=qt+static+linking
编辑:静态构建exe,意味着您没有使用LGPL版本.
意味着如果您使用的是LGPL,则必须让目标文件易于访问最终用户.
我认为@peppe描述得很好(见下面的评论):
从技术上讲,即使您的应用程序不使用LGPL,您也可以在LGPL下使用Qt时静态链接.唯一棘手的要求是保持第三方能够根据不同的Qt版本重新链接您的应用程序.但是你可以通过提供应用程序的巨大目标文件(.o)轻松地遵守它,只需要与任何Qt版本链接.
http://blog.qt.io/blog/2009/11/30/qt-making-the-right-licensing-decision/
看看底部附近的图表.如果您正在使用商业版本,那么您可以静态链接,而无需担心目标文件.
可再发行的依赖项与运行时库链接器选项有关.
http://msdn.microsoft.com/en-us/library/aa278396(v=vs.60).aspx
/MD, /ML, /MT, /LD (使用运行时库)
要在开发环境中查找这些选项,请单击"项目"菜单上的"设置".然后单击"C/C++"选项卡,再单击"类别"框中的"代码生成".请参阅使用运行时库下拉框.
下面的这两个链接谈论了一些旧版本的visual studio,但推理应该仍然有效.
http://www.davidlenihan.com/2008/01/choosing_the_correct_cc_runtim.html
如何使用Visual Studio Express 2005创建完全静态链接的.exe?
希望有所帮助.
只需打开终端执行即可your_qt_installpath/version/compiler/bin/windeployqt.exe YourApplication.exe.它会自动将所有必需的库和内容复制到exe所在的文件夹中,您可以将其分发.