文档章节

qt

Rechy
 Rechy
发布于 2014/01/03 02:48
字数 1773
阅读 257
收藏 0
点赞 1
评论 1

推荐用dwarf版的i686-w64-mingw编译
i686-4.8.1-release-win32-dwarf-rt_v3-rev2.7z\mingw32\opt\x32-480-posix-dwarf-r2

注意5个路径宏(环境变量)
MINGW_HOME=D:\MinGW\i686-w64-mingw32
C_INCLUDE_PATH=%MINGW_HOME%\include;//不可加这个路径否则头文件优先级冲突%MINGW_HOME%\i686-w64-mingw32\include;
CPLUS_INCLUDE_PATH=%MINGW_HOME%\include;//不可加这个路径否则头文件优先级冲突%MINGW_HOME%\i686-w64-mingw32\include;
LD_LIBRARY_PATH=%MINGW_HOME%\bin;//不可加这个路径否则头文件优先级冲突%MINGW_HOME%\i686-w64-mingw32\bin;
LIBRARY_PATH=%MINGW_HOME%\lib;//不可加这个路径否则头文件优先级冲突%MINGW_HOME%\i686-w64-mingw32\lib;

安装ruby1.90+和perl,python2.7

依赖zlib 要确定mingw安装了 zlib的
qt编译需要用到python

release webkit时会需要win_flex.exe bison.exe等
需要将
D:\CLib\Qt_everywhere_520rc1\gnuwin32
目录加到环境变量path最前面,防止git/bin/bison.exe和gnuwin32/bison.exe冲突出错

//-- 如你不想自己配置mingw环境, 也可以使用官方提供的版本中的mingw
qt5.2.0beta1版(-符号,非--符号)
先下载mingw的编译成功版(shared)带mingw,安装msys配置mingw
然后下载源码编译静态版 --//

./configure
-prefix D:/CLib/Qt/Qt5.2.0-rc1/5.2.0-rc1/mingw48_32_static
#路径只能是上面的写法,不能用/D/CLib或D:\\CLib或D:\CLib
#否则qtcreator不能识别这种路径,显示获取qt版本失败
#D:/CLib/Qt/Qt5.2.0-rc1/5.2.0-rc1/mingw48_32_static
#-prefix第一次生成错误则需还原qtbase目录重新执行./configure,
#不还原qtbase目录就重生成的qmake(-query)路径会始终有错误
-debug #跟release要单独使用编译
-release
-platform win32-g++
#必须设置交叉编译属性,否则qtcreator不识别
-static
-nomake examples
-nomake tests
-no-rpath
#mingw平台不支持rpath
-continue #不建议使用,反而导致错误难以发现,而反复失败
-icu #要用webkit和全集unicode要编译icu-unicode(icu4c)
#错误继续,除非有错误始终过不了,不然不要加
如:-编译需先编译debug在release版,以防留下较大文件的debug版exe
ICU通过检测需要libs*.a libs*d.a 但是编译时还需要lib*.a (release的bug)

//debug版可能检测不到icu需要加上continue参数
./configure -prefix D:/CLib/Qt/Qt5.2.0-rc1/5.2.0-rc1/mingw48_32_static_icu -platform win32-g++ -release -static -confirm-license -qt-sql-odbc -nomake examples -nomake tests -no-rpath -icu -skip webkit -skip webkit-examples
./configure -prefix D:/CLib/Qt/Qt5.2.0-rc1/5.2.0-rc1/mingw48_32_stared_icu -platform win32-g++ -release -shared -confirm-license -qt-sql-odbc -nomake examples -nomake tests -no-rpath -icu -skip webkit -skip webkit-examples
./configure -prefix D:/CLib/Qt/Qt5.2.0-rc1/5.2.0-rc1/mingw48_32_static -platform win32-g++ -debug -static -confirm-license -qt-sql-odbc -nomake examples -nomake tests -no-rpath -no-icu -skip webkit -skip webkit-examples
./configure -prefix D:/CLib/Qt/Qt5.2.0-rc1/5.2.0-rc1/mingw48_32_static -platform win32-g++ -release -static -confirm-license -qt-sql-odbc -nomake examples -nomake tests -no-rpath -no-icu -skip webkit -skip webkit-examples
./configure -prefix D:/CLib/Qt/Qt5.2.0-rc1/5.2.0-rc1/mingw48_32_shared -platform win32-g++ -debug -shared -confirm-license -qt-sql-odbc -nomake examples -nomake tests -no-rpath -no_icu -skip webkit -skip webkit-examples
./configure -prefix D:/CLib/Qt/Qt5.2.0-rc1/5.2.0-rc1/mingw48_32_shared -platform win32-g++ -release -shared -confirm-license -qt-sql-odbc -nomake examples -nomake tests -no-rpath -no-icu -skip webkit -skip webkit-examples
./configure执行后需要 atbase/bin/qmake.exe -query查看路径情况

路径不对qtcreator将不能识别
以下情况也不能识别:
缺少bin/libQt5Cored.dll【shared】或lib/libQt5Cored.a【static】(都要有debug版)

编辑器选责输入o(c商业,o开源)
LGPL选输入yes


执行下面命令,等待2~3个小时时间
make
make install

反安装:make uninstall
清除编译:make clean

如果修改./configure参数(特别是--prefix)的编译则需重新复制进纯净qtbase/目录,反之可直接make

=======================================================
如果jsc::yarr::..出错
修改
qtdeclarative/YarrInterpreter.cpp
qtdeclarative/YarrPattern.cpp
qtscript/RegexCompiler.cpp
qtwebkit/YarrPattern.cpp
下的一众:
CharacterClass* newlineCreate();
。。。
CharacterClass* nonwordcharCreate();

为一致:
inline CharacterClass* newlineCreate()
{
。。。
}

=======================================================
如果'off64_t' does not name a type错误
这是新版mingw的io.h文件新定义的变量 在<sys/types.h>中
缺少的文件都加上这个头文件
则修改/mingw/sys/types.h中和 /mingw/mingw32/sys/types.h中第146行处
#define _OFF64_T_ 之后加上
#define MY_XBUG_OFF64_T_
修改/mingw/sys/io.h中和 /mingw/mingw32/sys/io.h中第300行处
修改为
#ifndef __NO_MINGW_LFS
#if defined(_OFF64_T_) && !defined(MY_XBUG_OFF64_T_)
__CRT_INLINE _off64_t lseek64 (int, _off64_t, int);
__CRT_INLINE _off64_t lseek64 (int fd, _off64_t offset, int whence) {
  return _lseeki64(fd, (__int64) offset, whence);
}
#else
__CRT_INLINE off64_t lseek64 (int, off64_t, int);
__CRT_INLINE off64_t lseek64 (int fd, off64_t offset, int whence) {
  return _lseeki64(fd, (long long) offset, whence);
}
#endif
#endif

=======================================================
如果出现QT_PLUGIN_PATH不是内部或外部命
这是项目文件环境变量值解析的问题
修改qtbase/mkspecs/features/qt_functions.prf

defineTest(qtAddToolEnv)(大概218行)中的
$$1 = "$$val $$eval($$1)" (大概241行)

!contains(QMAKE_HOST.os, Windows){
    $$1 = "$$val $$eval($$1)"
}

=======================================================
如果如下错误:
qopenglversionfunctions.h:785:43: error: expected
unqualified-id before ')' token
void (QOPENGLF_APIENTRYP MemoryBarrier)(GLbitfield barriers);
则在/mingw/sys/winnt.h中和 /mingw/mingw32/sys/winnt.h中的
MemoryBarrier定义改为:
#if _WIN32_WINNT >= _WIN32_WINNT_VISTA
# if defined(_AMD64_) || defined(__X86_64)
#  define MemoryBarrier __faststorefence

# elif defined(_IA64_)

#  define MemoryBarrier __mf
# else

   void __mingworg_MemoryBarrier(void);
#  define MemoryBarrier __mingworg_MemoryBarrier
# endif

//<< my_xbug
#elif defined __GNUC__ && __GNUC__ >= 4 && __GNUC_MINOR__ >= 4

# define MemoryBarrier __sync_synchronize
//>> my_xbug
#else

# define MemoryBarrier
#endif

======================================================
如果如下错误:
d:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot fin
d -lsicuind
d:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot fin
d -lsicuucd
d:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot fin
d -lsicudtd
静态release版会提示找不到-licuin -licuuc -licudt则需要libsicuin.a复制为libicuin.a
则需要icu-unicode需要debug和release双版本 且static为libs*.a而debug命名加libs*d.a
shared为lib*.a而debug命名加lib*d.a

======================================================
如下一堆WINDOWS错误(由于mignw4.81的头文件包含顺序不当,会造成错误回环):
In file included from d:\mingw\include\objbase.h:95:0,
                 from d:\mingw\include\ole2.h:31,
                 from d:\mingw\include\windows.h:101,
                 from d:\mingw\include\rpc.h:27,
                 from d:\mingw\include\wtypes.h:29,
                 from platformdefs.h:45,
                 from main.cpp:43:
d:\mingw\include\objidl.h:69:2: error: 'LPOLESTR' does not name a type
  LPOLESTR pwcsName;
  ^
d:\mingw\include\objidl.h:113:9: error: 'OLECHAR' does not name a type
 typedef OLECHAR **SNB;
         ^
d:\mingw\include\objidl.h:259:2: error: 'OLECHAR' does not name a type
  OLECHAR rgString[1];
  ^
d:\mingw\include\objidl.h:302:2: error: 'CY' does not name a type
  CY *pElems;
  ^
  。。。
要修改这个错误就要加个宏防止错误回环,修改/mingw/wtypes.h的
#ifndef MY_XBUG_WTYPES_H
#define MY_XBUG_WTYPES_H
#ifdef __cplusplus
extern "C" {
#endif
。。。。。。。。。。。。。。。。。
#ifdef __cplusplus
}
#endif
#endif

在重复的文件里面,引用wtypes.h之前修改为如下
(如:/mingw/objbase.h 93行):

#if !defined(MY_XBUG_WTYPES_H) && defined(_WTYPES_H)
#undef _WTYPES_H
#endif
#include <wtypes.h>


==========================================================
//一堆windows定义错误,需要将系统默认的最低win2000提升为最低xp

修改/mingw/sdkddkver.h之下的系统默认值(150行后)
#    ifdef _WARN_DEFAULTS
//#    warning _WIN32_WINNT is defaulting to _WIN32_WINNT_WIN2K
//     MY_XBUG_DEFAULT_WIN32
#      warning _WIN32_WINNT is defaulting to _WIN32_WINNT_WINXP
#    endif
//#  define _WIN32_WINNT _WIN32_WINNT_WIN2K
//   MY_XBUG_DEFAULT_WIN32
#    define _WIN32_WINNT _WIN32_WINNT_WINXP

单独修改的:
qtbase/src/plugins/platforms/windows/qwindowsfontengine.cpp 首 0x0500 改为 0x0501
qtbase/src/corelib/io/qfilesystemiterator_win.cpp 首 0x0500 改为 0x0501

================================================================
错误:redefinition of 'struct SHARDAPPIDINFOLINK'
重复定义SHARDAPPIDINFOLINK
修改qtwinextras\src\winextras\winshobjidl_p.h的定义处加上NTDDI_VERSION判断
#       if defined(_SHLOBJ_H_) || (!defined(_SHLOBJ_H_) && NTDDI_VERSION < 0x06010000)
...
#       endif


================================================================
lralease崩溃是使用icu导致不能获取系统编码(US-ASCII)在QTextStream销毁时
导致错误,修改qtbase\src\corelib\io\qtextstream.cpp的第500行左右
QTextStreamPrivate::flushWriteBuffer()
{
........................

#ifndef QT_NO_TEXTCODEC
    if (!codec){
        codec = QTextCodec::codecForLocale();
    }
#if defined (QTEXTSTREAM_DEBUG)
    qDebug("QTextStreamPrivate::flushWriteBuffer(), using %s codec (%s generating BOM)",
           codec->name().constData(), writeConverterState.flags & QTextCodec::IgnoreHeader ? "not" : "");
#endif
    // convert from unicode to raw data
    QChar* qdata = writeBuffer.data();
    int sz = writeBuffer.size();
    QByteArray data;
    if (codec)
        data = codec->fromUnicode(qdata, sz, &writeConverterState);
    else
        data = writeBuffer.toLocal8Bit();
#else
    QByteArray data = writeBuffer.toLocal8Bit();
#endif
    writeBuffer.clear();

........................
}

==============================================================
JS_EXPORT_PRIVATE宏错误 是由于Source\JavaScriptCore\下congfig.h和Source\WTF\下的config.h冲突
Source\JavaScriptCore\下的所有代码实际使用了Source\WTF\下的config.h因此需在Source\WTF\config.h
加上
#if !defined(BUILDING_WTF)
#include "JSExportMacros.h"
#endif
这句以是两个config.h个文件基本一致(不加JSExportMacros.h就会出现宏错误)

© 著作权归作者所有

共有 人打赏支持
Rechy
粉丝 2
博文 30
码字总数 5766
作品 0
沈阳
程序员
加载中

评论(1)

dosmlp
dosmlp
全部用到了,谢谢
《Qt 实战一二三》

简介 “我们来自Qt分享&&交流,我们来自QML分享&&交流”,不管你是笑了,还是笑了,反正我们是认真的。我们就是要找寻一种Hold不住的状态,来开始每一天的点滴分享,我们是一个有激情,有态度...

u011012932
2015/12/12
0
0
Qt 5.7 发布,C++ 跨平台界面库

Qt 5.7 发布了,主要更新内容如下: 更新许可 不再使用LGPL version 2.1,我们使用LGPL version 3 (and GPL version 2)在几乎所有的框架和库上,使用GPL version 3在工具上,例如像Qt Creato...

泥鳅码
2016/06/16
15.9K
29
【盘点】全面强大开发框架Qt资源汇总

Qt最早诞生于1991年,在全世界开发者中享有盛誉。Qt Enterprise v5.5是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中...

Miss_Hello_World
2016/02/25
87
0
Qt使用教程之创建Qt Quick项目

<Qt Enterprise最新版下载> Qt长期以来一直以“linux平台下,最著名的开发平台”身份在全世界开发者中享有盛誉。Qt Enterprise v5.5是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现...

Miss_Hello_World
2015/10/20
141
0
Project Move from Qt 4 to Qt 5 项目工程的迁移

将Qt4的项目迁到Qt5中并不需要新建一个Qt5的工程,可以直接在原工程文件上修改,这里我们使用的是VS2010和Qt5.4的环境,我们需要做以下修改: 1. 在工程里找到这个文件:工程名.vcxproj.user...

机器的心脏
2017/12/10
0
0
Qt配置使用VS2010进行开发

Qt – 一个跨平台应用程序和UI开发框架 它包括跨平台类库、集成开发工具和跨平台 IDE。使用 Qt 您只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用...

长平狐
2013/01/06
267
0
Qt 5.7 Beta发布,C++跨平台界面库

Qt 5.7不再兼容C++98,是一个全面体现C++11优势的版本,从底层实现到api设计,充分使用C++11特性,比如非常方便的auto和lambda函数。由于Qt5.6是一个LTS版本,所以设计时向C++98靠拢,使用了...

lieefu
2016/04/22
4.9K
35
Qt 5.5 正式发布,完全支持 Windows 10

Qt 5.5 正式发布!过去的 6 个月时间,修复了 1500 个报告的 Bug,实现了大量的性能改进。同时还完善了跨平台功能,并且优化了多媒体和蓝牙方面的功能。 完善跨平台功能 Windows:Qt 5.5 做了...

oschina
2015/07/02
38.7K
28
QT中的树型控件QTreeWidget和checkstate的使用

今天简单说一下Qt的树形控件,在Qt中树形控件的名称叫做QTreeWidget,而控件里的树节点的名称叫做QTreeWidgetItem。今天这 里讲的是如何创建具有复选框的树形控件: 当选中顶层的树形节点时,...

barsoom
2012/11/02
0
0
ubuntu构建Qt测试QtWayland

默认qt不含QtWayland,需要我们自己编译 一般构建 按照 https://wiki.qt.io/BuildingQt5fromGit https://wiki.qt.io/QtWayland 安装环境依赖 参考配置脚本和 http://doc.qt.io/qt-5/configur...

心翔
2016/06/22
58
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CVE-2013-0077 堆溢出分析

找了很久才发现这个环境比较容易搭建分析... 环境: 系统---Win XP SP3 漏洞程序:QQPlayer 3.7.892.400 出错DLL:quartz.dll 6.5.2600.5512 调试工具:x32db+gflag.exe 过程: 首先gflag设置...

Explorer0
5分钟前
0
0
python上传文件

//注意 <form action="/login/" method="post" enctype="multipart/form-data"> f=request.FILES.get('fafa') ff=open(f.name,mode='wb') for i in f.chunks(): ff.write(i) ff.close()......

南桥北木
18分钟前
0
0
CISCO VPN Client Reason 442 WIN8/10错误解决方案

http://jdkleo.iteye.com/blog/2163493 引用 http://my.oschina.net/cloudcoder/blog/220391?p={{currentPage 1}} 在使用cisco VPN 客户端登录时,产生Reason 442:Failedto enable Virtual......

chenfj_fer
21分钟前
0
0
信号量有没有容量限制?

之前一直误以为信号量初始化的时候那个初始化的值是信号量的“容量”,昨天同事指出了我的错误,最初我是不相信的,经过以下代码实践,证明了我的错误: Java版: import java.util.concurr...

锟斤拷烫烫烫
25分钟前
0
0
【RocketMQ】Message存储笔记

概述 消息中间件存储分为三种,一是保存在内存中,速度快但会因为系统宕机等因素造成消息丢失;二是保存在内存中,同时定时将消息写入DB中,好处是持久化消息,如何读写DB是MQ的瓶颈;三是内...

SaintTinyBoy
36分钟前
0
0
Android应用Context详解及源码解析

Android应用Context详解及源码解析 本文定位:优质文章收集 本文转载 1 背景 今天突然想起之前在上家公司(做TV与BOX盒子)时有好几个人问过我关于Android的Context到底是啥的问题,所以就马...

lichuangnk
今天
0
0
PostgreSQL的昨天今天和明天

PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS), 也是目前功能最强大,特性最丰富和最复杂的自由软件数据库系统。有些特性甚至连商业数据库都不具备。 这个起源于伯克利(...

闻术苑
今天
1
0
Mysql对自增主键ID进行重新排序

1,删除原有主键: ALTER TABLE `table_name` DROP `id`; 2,添加新主键字段: ALTER TABLE `table_name` ADD `id` MEDIUMINT( 8 ) NOT NULL FIRST; 3,设置新主键: ALTER TABLE `table_nam......

niithub
今天
0
0
福利篇:免费csdn vip账号分享

分享一个发布免费csdn vip账号的网站:啰嗦vip www.lostvip.com , 各种软件开发类的视频教程:慕课网、动脑学院、黑马各大培训机构VIP视频教程,非常不错!

在水一方发盐人
今天
1
0
Nginx+Tomcat搭建高性能负载均衡集群

一、 工具   nginx-1.8.0   apache-tomcat-6.0.33 二、 目标   实现高性能负载均衡的Tomcat集群:    三、 步骤   1、首先下载Nginx,要下载稳定版:      2、然后解压两个Tom...

码代码的小司机
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部