qt编译不了
Ⅰ vs不能编译qt
1. 建立环境变量
QMAKESPEC win32-msvc2011 // 注意
QTDIR S:\QT\4.8.4 // Qt的安装目录
Path S:\QT\4.8.4\bin;
注意: QMAKESPEC 还是 win32-msvc2011 因为如果要改成win32-msvc2012,需要改很多相关的配置。又麻烦又不安全。而且使用win32-msvc2011并不影响我们的结果。
2. 修改 mkspecs\win32-msvc2011\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-msvc2011 -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::pair(const std::pair &)' : cannot convert parameter 1 from 'std::pair' to 'const std::pair &'
在Qt的Src目录搜索这个HashSet.h
将180行所在的函数以及它下面的函数用下面的代码替换:
template
inline pair<typename HashSet::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<typename HashSet::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("", (selectedString));
大家注意 单词前后的引号。就是它造成编译报错。修改成下面的代码
return WEB_UI_STRING("Look Up \"\"", "Look Up context menu item with selected word").replace("", (selectedString));
8. 再次nmake,好了到这里为止,就剩下漫长的等待了。我一般是睡觉之前编译,一晚上的时间足够了。
9. 补充,有个开源工具叫jom,也是qt官方的,它支持多核编译,可以大大加快编译速度。
使用的方法也很简单jom –j 8 你有几个核就写几。我是8个核
注意最后两个DLL是VS2012的运行时库,说明我们已经编译成功了!
Ⅱ 为什么这个Qt程序编译不了
原因:Qt不支持中文的路径,把源码的路径全部改成英文即可解决问题。
Ⅲ Qt 编程无法编译,高手来!
把你生成的xxx-build-desktop这个文件夹删除,重新编译试试看,如果不行的话就是你的环境变量没设好,为mingw32设一下环境变量
Ⅳ 求助QT5.4 安装在win8.1后无法编译
关于QT安装时出现错误请参照我的上一篇文章http://hi..com/whyme%CE%DE%CF%DE/blog/item/91103d1a71f4aed5e2fe0b65.html
现在说一下编译运行出错的解决办法:
说明:redhat红帽5.4有点太老了,所以运行最新的QT时,出现了各种问题,最主要的就是各种库的问题:
(1)undefined reference to `FcFreeTypeQueryFace'的问题
需要更新fontconfig,我用的是fontconfig-2.6.0.tar.gz,2.5.0我试了,出现了很多错误,不知道为什么2.6.0可以,
附下载地址http://115.com/file/be9m2r
解压到/usr/src 进入后 ./autogen.sh 然后终端中提示make,你就make,最后make install。完成。./autogen.sh也可以输入./configure --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man 具体可能是./configure后指明了安在你想要安得地方吧(我用的是./autogen.sh)
如果期间遇到错误不要不耐烦,按照提示网络一下会有解决的办法的。
(2)undefined reference to 'FT_Library_SetLcdFilter'
这是由于freetype太旧的原因,也是一样,需要更新:
附下载地址:http://115.com/file/anwcxdfk
安装方法与(1)一样。也有安装(1)时可能有问题要先安装(2) 这个自己尝试吧,我是先(1)后(2)的。
还有就是我的系统是红帽企业版5.4,不是的或者版本不一样的,我不知道我的方法有没有效果。
(3)接下来应该有的例程就可以编译运行了,但是还有不能运行的,那是因为你的glibc太旧了,这个是c动态库。必须注意的是,几乎所有的应用程序都依赖于glibc的动态库,重新编译安装glibc必须非常谨慎,一旦出错可能导致系统无法继续使用。所以强烈建议阅读源码目录下的INSTALL。
附下载地址:http://115.com/file/e749sc6n
第一步是配置glibc,出于安全的考虑,glibc不允许在源码目录树下编译,必须新建一个目录,然后在新建目录下运行configure,我就在/usr/src下建了一个glibc文件夹mkdir glibc。然后在新建目录里运行解压缩文件中的config,在运行这个之前,先在终端运行需要加上优化开关export CFLAGS="-g -O2 -march=i686" ,然后运行../glibc/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin 这样就不是默认安装的路径了安装在/usr下,这会将glibc安装为linux系统的标准库。
执行make -j 。glibc的编译相当耗时,可以给make加上-j选项并行编译glibc。make -j
然后make install。
make时可能会有错误我就遇到了以下错误,我是这么解决的:
1、在编译glibc的过程中可能出现错误:“../sysdeps/i386/fpu/s_frexp.S:66: Error: invalid identifier for ".ifdef"”,解决方法是:
1)、在glibc源码目录下找到文件:nptl/sysdeps/pthread/pt-initfini.c,找到第46行附近:asm ("\n#include "defs.h"");在其后添加代码:
asm ("\n#if defined __i686 && defined __ASSEMBLER__");
asm ("\n#undef __i686");
asm ("\n#define __i686 __i686");
asm ("\n#endif");
2)、在glibc源码目录下找到文件:sysdeps/unix/sysv/linux/i386/sysdep.h,找到第30行附近:#include <tls.h>,在其后添加代码:
#if defined __i686 && defined __ASSEMBLER__
#undef __i686
#define __i686 __i686
#endif
重新make
2、在编译glibc的过程中可能出现错误:“./sysdeps/i386/i686/multiarch/strcmp.S:78: Error: Error: unrecognized symbol type "gnu_indirect_function"unrecognized symbol type "gnu_indirect_function"”,原因是没有安装新版的binutils,如果依照前面的步骤安装了binutils-2.21应该不会出现该错误。(注第2个错误我没遇到)
注:还有一个地方不知道是哪一步遇到错误了需要安装libxml我在红帽的系统镜像中的server中找到了三个相关文件libxml2*.rpm安装即可!!!!!!
至此,重启reboot,打开QT运行例程,可能还有问题,我的就是还是有问题,解决办法如下:
把QT的安装目录和QT中的bin都添加为环境变量,在/etc/profile下,具体怎么填您应该知道吧,这里不提了。source /etc/profile一下
然后再点击QT的左边栏的项目在构建和运行的选项中,您可能哪里没有选择,一定要让你的项目有效和目录正确,QT的版本正确!!!QT的gcc编译目录正确,gcc一般用的是QT文件中自带的!!如果还不行,那就在你的在项目目录项运行make clean!!如果还不对!!!vi Makefile 可能是这里有问题,如果不会改,就干脆删了rm Makefiel。然后再在QT中运行一下。
Ⅳ 新人求助 Qt无法编译运行
Could not find qmake configuration directory 从这个错误上看,是qt.conf配置文件受到破坏。 有两种可能性: 1、病毒恶意破坏qt.conf文件 2、自然界不可抗因素破坏(比如电脑遭雷击导致硬盘中的部分文件丢失)
Ⅵ QT编译错误,怎么解决
项目->构建设置,把中文路径改为英文路径 ,记得清理之后再重新构建哦
Ⅶ Qt 编译不了,怎么解决啊,'cl' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
没装 Visual Studio 自然用不了 cl 编译器。
如果确定装了 Visual Studio ,就手动设置编译器选项,选择正确的路径
如果真的没装 Visual Studio ,也没必要装(毕竟 Visual Studio 体积不小),mingw-w64体积小得多,而编译器的优化能力甚至更出色(下载地址: http://sourceforge.net/projects/mingw-w64/ )
Ⅷ QT 在Ubuntu下无法编译,怎么解决
g++没有安装,一般这种情况都是环境中找不到编译器的缘故。你这只是简单安装的linux的桌面版qt,所以只要环境中有c++即可,如果你是安卓,那东西就更多了,ant,java,sdk等等。
解决办法:sudo apt-get install g++
Ⅸ 新人求教,急.qt4.8.6无法编译
认真核对操作步骤:
1、修改环境变量工具推荐:Rapid Environment Editor。
修改前请先备份当前的环境变量。然后:
(1)检查系统变量path,删除有关mingw其他版本等信息,以免与后续的mingw32-make冲突。
(2)检查用户变量INCLUDE、LIB、PATH、MSDevDir和MSVCDir,删除有关\Microsoft Visual Studio\VC98的信息,因为它们会与后续的mingw32-make冲突,导致编译出错。
2、在电脑上安装mingw编译器,假设路径安装在C:\Qt\mingw32。将C:\Qt\mingw32\bin添加进环境变量path,打开DOS命令行输入gcc --version和g++ --version和mingw32-make --version验证编译器安装成功。我用的MinGW版本是V4.8.2,
3、解压qt-everywhere-opensource-src-4.8.6.zip并进入目录。例如:D:\qt-everywhere-opensource-src-4.8.6\
4、依次执行以下DOS命令:
(1)configure -debug-and-release -opensource -prefix "D:\Qt4.8.6" -platform win32-g++ -nomake demos -nomake examples
常见的使用选项说明:
-debug-and-release 编译debug和release版
-opensource 选择开源协议并确认
-platform win32-g++ 使用mingw编译
-prefix "D:\Qt4.8.6" 指定编译结果目录,如果未指定则默认当前
-shared 创建和使用共享Qt库
-static 创建和使用静态Qt库
-nomake demos -nomake examples 不编译例程
-nomake tests 不编译tests
-skip qtwebkit 忽略qtwebkit,因为编译它特别消耗时间
-mp 使用多核优化编译
(2)mingw32-make
(3)mingw32-make install
5、编译完成后,把C:\Qt\mingw32\bin\路径下的三个文件libgcc_s_dw2-1.dll、libstdc++-6.dll和libwinpthread-1.dll拷贝到D:\qt-everywhere-opensource-src-4.8.6\bin\。另外,也请把步骤1备份的环境变量还原。
6、修改Qt安装路径
最初编译时选择的路径是D:\Qt4.8.6\。如果想将它复制到其他盘符,并且改名,例如:C:\Qt\4.8.6_MinGW。这样一来会有问题吗?是的,会有问题,因为Qt有绝对路径依赖症。改名后C:\Qt\4.8.6_MinGW\bin\的exe执行程序都会出问题,要么程序打不开,要么多国语言发生异常。用记事本打开C:\Qt\4.8.6_MinGW\bin\qmake.exe,查找关键字“qt_prfxpath”,可以看到里面含有原始的安装路径。我们不可以手动去修改qmake.exe,真正有效的解决方法是:
在C:\Qt\4.8.6_MinGW\bin\路径下创建一个qt.conf文件,内容为
[paths]
Prefix = C:/Qt/4.8.6_MinGW
请注意:qt.conf文件必须是ANSI格式,并且Prefix的斜杠风格采取的是Linux的,而非Windows,否则会失效。或者使用"Prefix = .. ",如此一来,任意路径有效。