永发信息网

求助VS2012编译qt4出问题了

答案:1  悬赏:50  手机版
解决时间 2021-03-27 13:51
求助VS2012编译qt4出问题了
最佳答案
1. 建立环境变量
QMAKESPEC win32-msvc2010 // 注意
QTDIR S:\QT\4.8.4 // Qt的安装目录
Path S:\QT\4.8.4\bin;
注意: QMAKESPEC 还是 win32-msvc2010 因为如果要改成win32-msvc2012,需要改很多相关的配置。又麻烦又不安全。而且使用win32-msvc2010并不影响我们的结果。

2. 修改 mkspecs\win32-msvc2010\qmake.conf
  将 QMAKE_COMPILER_DEFINES += _MSC_VER=1600 WIN32 当中的1600改成1700

QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t-
改为
QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t

3. 在开始菜单中找到 VS2012 x86 Native Tools Command Prompt 并运行
这一步非常简单但很重要,一定要选择VS2012目录下的bat文件

4. 在控制台中,切换到Qt的安装目录下。使用如下参数进行配置
configure.exe -platform win32-msvc2010 -opensource -debug-and-release -shared -qt-sql-sqlite -plugin-sql-sqlite -qt-zlib -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -qmake -process -rtti -dbus -webkit -script -scripttools -no-dbus

5. nmake 开始编译。 不过在编译过程中会遇到几个错需要手动修改一下代码。

6. 第一个错误如下:
.\wtf/HashSet.h(180) : error C2664: 'std::pair<_Ty1,_Ty2>::pair(const std::pair<_Ty1,_Ty2> &)' : cannot convert parameter 1 from 'std::pair<_Ty1,_Ty2>' to 'const std::pair<_Ty1,_Ty2> &'
在Qt的Src目录搜索这个HashSet.h
将180行所在的函数以及它下面的函数用下面的代码替换:
template
inline pair::const_iterator, bool> HashSet::add(const ValueType &value)
{
auto p= m_impl.add(value);
return make_pair(typename HashSet::const_iterator(p.first), p.second);
}
template
template
inline pair::iterator, bool>
HashSet::add(const T& value)
{
typedef HashSetTranslatorAdapter Adapter;
typedef typename HashSet::iterator iter_type;
auto& temp = m_impl.template addPassingHashCode(value, value);
return make_pair((iter_type)temp.first, temp.second);
}
7. 继续 nmake 遇到第二个错误
platform\DefaultLocalizationStrategy.cpp(327) : error C2001: newline in constant
platform\DefaultLocalizationStrategy.cpp(327) : fatal error C1057: unexpected end of file in macro expansion
这个错误的原因是因为代码里面的非英文的引号造成的。
原始的错误代码如下:
return WEB_UI_STRING("Look Up “”", "Look Up context menu item with selected word").replace("", truncatedStringForLookupMenuItem(selectedString));
大家注意  单词前后的引号。就是它造成编译报错。修改成下面的代码
return WEB_UI_STRING("Look Up \"\"", "Look Up context menu item with selected word").replace("", truncatedStringForLookupMenuItem(selectedString));

8. 再次nmake,好了到这里为止,就剩下漫长的等待了。我一般是睡觉之前编译,一晚上的时间足够了。

9. 补充,有个开源工具叫jom,也是qt官方的,它支持多核编译,可以大大加快编译速度。
  使用的方法也很简单jom –j 8 你有几个核就写几。我是8个核

注意最后两个DLL是VS2012的运行时库,说明我们已经编译成功了!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
0x7c930cd0指令引用的0xf7c6c4bc内
秦国经过什么?实力,超过了东方六国。
女生买旅行包,首先注意的是什么?
红军两万五千里长征简介
开车时减到了1档,怎么在换成空档(新手)
我想洗澡的时候灌肠清理宿便可以吗
请问一下国内贵金属平台哪个好
我老婆手机来个电话号码显示6888一个男人接的
儿童几岁,婴幼儿几岁?
超频对U有影响吗?怎么超?
人体什么部位可以把人打晕
3. 77除以3.14的竖式
如何评价 2014 年第 6 回 AKB48 选拔总选举的
求两三本特别特别好看的玄幻小说
王者荣耀提个建议。
推荐资讯
lol射手铭文怎么配
为什么我的心灵终结的地图编辑器只能显示出尤
养殖山羊有前景吗
伺服电机停止时有外力导致移位,会出现那些状
CAD2006序列号191-7544444 申请号 JCXX JG0
史铁生曾经给母亲出了一个什么样的难题、他对
十窍通了九窍?-打一成语.
我马上上高中,改名需要哪些程序?
曲线y=x^5-2x^4+3x+5的拐点
银子项链不想要了可以拿去加工其它什么吗
杭州北景园的自来水是什么水厂供应
在进行冲压工艺方案设计时,为什么要分析冲压
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?