• 12710阅读
  • 31回复

[共享]Qt5.3.1 for MinGW full release动态自编译 便携式版 [复制链接]

上一主题 下一主题
离线adonais
 

只看楼主 倒序阅读 楼主  发表于: 2014-07-03
Qt 5.3.1 development framework
相比官方版本:
1) 使用gcc4.8.3编译,静态链接libgcc,libstdc++库(移除libgcc_s_dw2-1.dll,,libstdc++-6.dll依赖).
2) win32线程,非posix线程(移除libwinpthread-1.dll依赖).
3) 集成QtCreator 3.2.0 stable(使用gcc4.8.3编译,移除vc运行库依赖).
4) 官方版本的大部分特性(opengl es2 与 qtwebkit 模块,包含示例,没有debug版本.)
5) 包含最新稳定版的编译工具链(gcc4.8.3,binutils2.24,mingw-w64-crt,qtsdk5.3.1 qtcreator 3.2.81)
6) 真正的便携式,解压即用. 命令行与gui两种开发环境.
7) 支持右键菜单与项目文件关联,qtxgui.exe -help查看如何使用.

下载地址:
http://sourceforge.net/projects/libportable/files/Tools/

备注:
1)默认编译的mingw crt不支持微软的所谓SECURE API(主要是为了兼容winxp).
  1. 修改compiler\mingw\i686-w64-mingw32\include\_mingw.h 文件
  2. /* #define MINGW_HAS_SECURE_API 1 */
  3. 改成
  4. #define MINGW_HAS_SECURE_API 1

即可启用SECURE API支持.
2)如要需要默认启用gdb调试,把下载回来的 gdb-python-7.7.1.zip  解压并覆盖到compiler\mingw目录下面.
3)Qt Creator后F1无法显示帮助文档的问题,解决方法如下:
【工具】->【选项】->【帮助】->【文档】->【添加】,添加Qt安装目录下doc\qt-creator\qtcreator.qch文档即可.
4)2014-8-22更新, 添加qtcreator帮助文档,mingw-w64-crt(19b7bca334fe191744ba1f7c41521c8978e1e35e),Qt Creator(3.2.0 stable).
离线arlyb

只看该作者 1楼 发表于: 2014-07-03
楼主
离线wdluo

只看该作者 2楼 发表于: 2014-07-03
不错!支持下!!
离线arlyb

只看该作者 3楼 发表于: 2014-07-03
离线adonais

只看该作者 4楼 发表于: 2014-07-04
回 arlyb 的帖子
arlyb:[图片] [图片] (2014-07-03 22:07) 

看英文提示已经说的很明白了,建议先了解qt5的发布,然后再学习qt5.
离线a67667667

只看该作者 5楼 发表于: 2014-07-05
回 adonais 的帖子
adonais:看英文提示已经说的很明白了,建议先了解qt5的发布,然后再学习qt5. (2014-07-04 00:35) 

四处看了 用了
#include <QtPlugin>

Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
Q_IMPORT_PLUGIN(AccessibleFactory)
提示
F:\MyFirstProgram\Kehuduan\main.cpp:-1: error: undefined reference to `qt_static_plugin_QWindowsIntegrationPlugin()'
F:\MyFirstProgram\Kehuduan\main.cpp:-1: error: undefined reference to `qt_static_plugin_AccessibleFactory()'
离线adonais

只看该作者 6楼 发表于: 2014-07-06
回 a67667667 的帖子
a67667667:四处看了 用了
#include <QtPlugin>
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
....... (2014-07-05 19:05) 

你载入插件用的是静态库的写法,我发布的是动态库啊.
离线a67667667

只看该作者 7楼 发表于: 2014-07-06
我2了 对不起...

补个问题 ,关于静态编译的
D:\QT\5.3.0-vs2013-rel-static\include\QtCore\qglobal.h:46: error: C1083: 无法打开包括文件: “stddef.h”: No such file or directory
本来是提示没有cl
我在Path里补了cl的地址 结果就这样了
离线adonais

只看该作者 8楼 发表于: 2014-07-06
回 a67667667 的帖子
a67667667:我2了 对不起...
补个问题 ,关于静态编译的
D:\QT\5.3.0-vs2013-rel-static\include\QtCore\qglobal.h:46: error: C1083: 无法打开包括文件: “stddef.h”: No such file or directory
本来是提示没有cl
....... (2014-07-06 11:32) 

这是因为你的开发环境没有配置好,你首先要确认你装好了vs2013.
然后通过 "开始菜单-vs2013-VS2013本机工具命令提示" (类似这样的菜单)
进入命令行环境.

然后在命令行下
set PATH=%PATH%;D:\QT\5.3.0-vs2013-rel-static\bin
应该就可以了.

离线chenjun0211

只看该作者 9楼 发表于: 2014-07-06
楼主牛人啊,妈妈再也不用担心安装官方发布的版本的麻烦了
离线a67667667

只看该作者 10楼 发表于: 2014-07-06
回 adonais 的帖子
adonais:这是因为你的开发环境没有配置好,你首先要确认你装好了vs2013.
然后通过 "开始菜单-vs2013-VS2013本机工具命令提示" (类似这样的菜单)
进入命令行环境.
....... (2014-07-06 12:15) 

我试试 谢谢
离线a67667667

只看该作者 11楼 发表于: 2014-07-06
回 adonais 的帖子
adonais:这是因为你的开发环境没有配置好,你首先要确认你装好了vs2013.
然后通过 "开始菜单-vs2013-VS2013本机工具命令提示" (类似这样的菜单)
进入命令行环境.
....... (2014-07-06 12:15) 

还是不行 照样提示错误
离线adonais

只看该作者 12楼 发表于: 2014-07-06
回 a67667667 的帖子
a67667667:还是不行 照样提示错误  (2014-07-06 17:54) 

按照我说的方法,你将得到一个cmd命令行窗口.
请在命令行下连续输入下面几个命令,确认你的编译环境没有配置错误:

cl.exe -help
echo %INCLUDE%
echo %LIB%
qmake --version

确认每个命令都能正确返回.
离线jixc2008

只看该作者 13楼 发表于: 2014-07-13
新建工程无法调试
离线jixc2008

只看该作者 14楼 发表于: 2014-07-13
新建工程无法Debug ?  缺少文件
离线adonais

只看该作者 15楼 发表于: 2014-07-17
回 jixc2008 的帖子
jixc2008:新建工程无法Debug ?  缺少文件 (2014-07-13 02:49) 

说明过了,没有debug版本.
离线yujincheng08

只看该作者 16楼 发表于: 2014-07-18
卧槽太棒 希望能继续下去

对了 应该有sql之类的吧?
离线abc100m

只看该作者 17楼 发表于: 2014-07-24
楼主,能编译个VS版的吗?编译成动态库,Qt5*.dll要不依赖微软的msvc*.dll

今天试了下,不行,编译出来的uic不能正确工作
离线icemic

只看该作者 18楼 发表于: 2014-07-25

'recursive_mutex' in namespace 'std' does not name a type

不支持c++11?
离线adonais

只看该作者 19楼 发表于: 2014-07-25
回 icemic 的帖子
icemic:'recursive_mutex' in namespace 'std' does not name a type
不支持c++11? (2014-07-25 13:16) 

准确的说是不支持C++11线程库,因为我默认编译和包含的是win32线程版的mingw,它编译出来的可执行文件更小,依赖更少.
如果你需要支持std线程库,可下载posix线程版的mingw替换压缩包内的mingw目录.
地址:
http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/4.9.1/threads-posix/dwarf/
离线icemic

只看该作者 20楼 发表于: 2014-07-25
回 adonais 的帖子
adonais:准确的说是不支持C++11线程库,因为我默认编译和包含的是win32线程版的mingw,它编译出来的可执行文件更小,依赖更少.
如果你需要支持std线程库,可下载posix线程版的mingw替换压缩包内的mingw目录.
地址:
http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting ..(2014-07-25 16:58)嬀/color]

感谢,楼主能写个教程讲一下编译过程和参数吗?
(特别是qmake.conf 需要改哪里,网上都是纯静态的教程)
离线adonais

只看该作者 21楼 发表于: 2014-07-27
回 abc100m 的帖子
abc100m:楼主,能编译个VS版的吗?编译成动态库,Qt5*.dll要不依赖微软的msvc*.dll
今天试了下,不行,编译出来的uic不能正确工作 (2014-07-24 22:23) 

这确实是个好主意,我有过这方面的想法,但我不能肯定是不是有时间去尝试.
大概需要下面几个步骤:
1)首先你需要自行裁剪出winxp sp2系统上msvcr.dll的导入库,比如我们命名它为light.lib.
可能还要需要添加_STATIC_CPPLIB宏静态链接标准c++库.
2)可能需要大量修改源代码里面带_s结尾的c库函数,因为这些函数不会出现在light.lib里面.
3)修改链接选项,加上/NODEFAULTLIB /DEFAULTLIB:OLDNAMES light.lib 这些参数.
4)尝试编译,修改编译中遇到的问题.如果成功,编译出来的qtsdk将支持winxp sp2--win8.1所有主流平台,并且将兼容vc2005--vc2013等所有编译器.
离线adonais

只看该作者 22楼 发表于: 2014-07-27
回 icemic 的帖子
icemic:感谢,楼主能写个教程讲一下编译过程和参数吗?
(特别是qmake.conf 需要改哪里,网上都是纯静态的教程) (2014-07-25 20:43) 

我真的不会写教程,我只能简单的说说构建思路:
1)部署编译环境.需要mingw-w64编译器,msys full shell,perl,python,ruby,以及qt5源代码,我个人比较喜欢绿色,所以都是提取的解压版本而不是直接安装.这里所说的msys full shell是指msys+autoconf+automake+msys-perl+gnu-tools等工具.
2)关于mingw-w64编译器的选择与升级.我不建议直接使用qt5二进制包里面集成的mingw64,因为它的gcc与crt版本都过旧,并且使用了sjlj异常与posix线程,我个人认为问题比较多.
3)使用msys+mingw64编译依赖库(icu,openssl),修改Makefile静态链接libgcc,libstdc++库.
4)修改qtbase\mkspecs\win32-g++\qmake.conf文件,添加-static-libgcc -static-libstdc++参数(静态链接libgcc,libstdc++库),这个可以在我的压缩包里面的5.3.1\mkspecs\win32-g++\qmake.conf文件里面看到.
5)打开cmd命令行(这里不要再使用msys shell),把mingw,perl,python,ruby这些程序所在路径以及qt5源码的一个bin目录都加入PATH环境变量.
官方建议添加环境变量的命令大致如下:
C:\> set PATH=%PATH%;C:\python;c:\perl\bin;c:\ruby\bin
C:\> set INCLUDE=%INCLUDE%;C:\dep\openssl\include;C:\dep\libicu\include
C:\> set LIB=%LIB%;C:\dep\openssl\lib;C:\dep\libicu\lib
6)在qt5源码顶层目录,运行configure.bat,可以开始编译了.如果编译成功,把安装的%qt5dir%\bin目录加入到环境,接着开始编译QtCreator集成开发环境.
离线gnibuoz

只看该作者 23楼 发表于: 2014-08-13
表示opengl出错了,还不知道什么原因....
我就是我,颜色不一样的烟火...
离线gnibuoz

只看该作者 24楼 发表于: 2014-08-13
具体错误如下,不用卤煮大神编译的便携版本的编译时可以的,用卤煮的版本打开工程编译就成这样了,百度了下,度娘表示她也没遇到过这个问题,有没有大神指导下
..\BladeShow\glwidget.cpp: In member function 'virtual void GLWidget::initializeGL()':
..\BladeShow\glwidget.cpp:579:21: error: 'GL_SMOOTH' was not declared in this scope
        glShadeModel(GL_SMOOTH);
我就是我,颜色不一样的烟火...
离线adonais

只看该作者 25楼 发表于: 2014-08-16
回 gnibuoz 的帖子
gnibuoz:具体错误如下,不用卤煮大神编译的便携版本的编译时可以的,用卤煮的版本打开工程编译就成这样了,百度了下,度娘表示她也没遇到过这个问题,有没有大神指导下[表情]
..\BladeShow\glwidget.cpp: In member function 'virtual void GLWidget::initializeGL()':
..\BladeS .. (2014-08-13 17:15)

你直接使用了opengl sdk而不是QtOpenGL.
你使用别的版本之所以能编译成功,因为他们的版本使用了"-opengl desktop"编译选项.
而我编译的版本是"-opengl es2" 使用了angle中间层支持oepngl es2 api,不再依赖本地openGL驱动.
说明白一点就是:
如果你的项目需要使用原生的opengl api,就应该使用"-opengl desktop"选项编译的版本.



离线gnibuoz

只看该作者 26楼 发表于: 2014-08-21
回 adonais 的帖子
adonais:你直接使用了opengl sdk而不是QtOpenGL.
你使用别的版本之所以能编译成功,因为他们的版本使用了"-opengl desktop"编译选项.
而我编译的版本是"-opengl es2" 使用了angle中间层支持oepngl es2 api,不再依赖本地openGL驱动.
说明白一点就是:
....... (2014-08-16 10:03) 

额额,刚看到,好的,明白了,谢大神啊!
我就是我,颜色不一样的烟火...
离线gnibuoz

只看该作者 27楼 发表于: 2014-08-21
回 adonais 的帖子
adonais:你直接使用了opengl sdk而不是QtOpenGL.
你使用别的版本之所以能编译成功,因为他们的版本使用了"-opengl desktop"编译选项.
而我编译的版本是"-opengl es2" 使用了angle中间层支持oepngl es2 api,不再依赖本地openGL驱动.
说明白一点就是:
....... (2014-08-16 10:03) 

谢大神!明白了,再次感谢!
我就是我,颜色不一样的烟火...
离线cloudyplain

只看该作者 28楼 发表于: 2014-10-12
启动qtguix.exe 报错:无法定位程序输入点glActiveTexture@4 于动态链接库 libGLESv2.dll上 是什么原因,谢谢!
离线adonais

只看该作者 29楼 发表于: 2014-10-15
回 cloudyplain 的帖子
cloudyplain:启动qtguix.exe 报错:无法定位程序输入点glActiveTexture@4 于动态链接库 libGLESv2.dll上 是什么原因,谢谢! (2014-10-12 16:04) 

可能是你的电脑上存在多个qt开发环境,把其他版本的qt从PATH环境变量移除掉或者卸载.
最好在比较干净的操作系统平台上测试下!
离线cloudyplain

只看该作者 30楼 发表于: 2014-10-17
回 adonais 的帖子
adonais:可能是你的电脑上存在多个qt开发环境,把其他版本的qt从PATH环境变量移除掉或者卸载.
最好在比较干净的操作系统平台上测试下! (2014-10-15 23:45) 

谢谢,我把这个dll当前目录下就可以了,另外问个编译的问题-opengl es2 -angle和-opengl es2有什么区别?
离线反恐行动

只看该作者 31楼 发表于: 2014-11-06
libgcc,libstdc++库(移除libgcc_s_dw2-1.dll,,libstdc++-6.dll依赖).
2) win32线程,非posix线程(移除libwinpthread-1.dll依赖).
3) 集成QtCreator 3.2.0 stable(使
快速回复
限100 字节
 
上一个 下一个