首页| 论坛| 消息

回复: Qt5.3.1 for MinGW full release动态自编译 便携式版
#21 回 abc100m 的帖子 [adonais 07-27 00:15]
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等所有编译器.
#22 回 icemic 的帖子 [adonais 07-27 01:48]
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集成开发环境.
#23 [gnibuoz 08-13 15:23]
表示opengl出错了,还不知道什么原因....
#24 [gnibuoz 08-13 17:15]
具体错误如下,不用卤煮大神编译的便携版本的编译时可以的,用卤煮的版本打开工程编译就成这样了,百度了下,度娘表示她也没遇到过这个问题,有没有大神指导下
..\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);
#25 回 gnibuoz 的帖子 [adonais 08-16 10:03]
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"选项编译的版本.

<< 3 4 5 6 7 >> (5/7)

回复 发表
主题 版块