如何在Windows上安装支持C++11的64位Qt?

13

简而言之:

  1. 我的64位Qt编译版本不支持C++11。
  2. 带有C++11的Qt构建是32位的。
  3. 使用在线安装程序安装的Qt5是32位的。
  4. 即使我花了过去3天来尝试,也无法从源代码构建64位Qt5。

求助!我的环境中可能存在不兼容的问题,但是是什么?


因此,我需要在Windows上使用C++11开发64位的Qt应用程序。 我已经在这里这里这里这里这里找到了相关讨论/指南,但都不适用或不起作用,尽管我注意到其中第二个可以让我构建带有C++11支持的Qt 4.8.3(但是32位)。 第三个看起来比应该更加复杂,并涉及使用VS 2010进行构建,这似乎是问题的一部分,因此我没有尝试它。 我还浪费了大量时间尝试使用不同的编译器构建先前版本,例如mingw和clang,因此我非常确信cl是我需要使用的。

基本上,我已经能够构建Qt4.8.3并在QtCreator 2.6.1中执行64位应用程序,但我无法获得完整的C++11支持。它只找到了来自VS 10.0的cl,它仅具有非常有限的C++11支持。找出如何让它使用来自VS 11.0的cl将是解决我的问题的一种方法。但是,当我尝试使用以下代码:

QMAKE_CXX = C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/bin/cl

进行构建时,会出现jom错误2,如果我选择使用nmake构建选项,则会出现类似的错误。

Qt 5应该具有完整的C++11支持。但是,当我尝试从源代码构建它时,它失败了。原因似乎是尽管从VS2012 x64 Cross Tools命令提示符运行configure/make,在configure步骤中指定-platform win32-2012并指定QMAKE_COMPILER_DEFINES += _MSC_VER=1700 WIN32,如此此指南所述,在win32-msvc2010和win32-msvc2012 mkspecs中,它仍然使用来自VS 2010的cl进行构建,并导致某种冲突。我这里是我的configure命令:

  

configure -static -debug-and-release -confirm-license -opensource   -nomake tests -nomake exampmles -opengl desktop -no-libjpeg -platform win32-msvc2012

这是我尝试构建时的链接器失败:

Here is the output from my build failure:

在前两段的末尾可以看到msvc-2010被包含了,在控制台输出中(未显示),moc命令中有-D_MSC_VER=1600
所以我很困惑,有人能帮忙吗?
编辑:我之前说正在使用Qt5构建64位应用程序,实际上我能够在Qt 4.8.3的构建中构建64位应用程序(不支持C++11)。如果我尝试在Qt5中进行此操作,我会收到以下错误:
LNK1112:模块机器类型“X86”与目标机器类型“x64”冲突
因此,这又回到了在64位模式下编译Qt5,但我似乎做不到。

我的意思是,Qt库只是你链接的DLL/lib文件,再加上一个自定义预处理器。Qt不是C++编译器。C++11支持取决于您使用的编译器,在Windows上可以是MinGW或MSVC。或者你是指Qt Creator(IDE)吗?在这种情况下,由于你在Windows上,你可以使用Visual Studio代替 - Qt有一个插件。它允许你将Qt Creator项目转换为VS .sln文件。 - sashoalm
@satuon 我正在使用VC++ 11.0 x86编译可以与C++11一起使用的版本,无法使用32位Qt构建的x64版本。(当然,我猜是这样的。)Windows SDK 7.1,amd64用于可以支持64位的版本。 - Matt Phillips
啊,我现在明白了。是的,64位exe不能使用32位DLL,反之亦然,这是当然的。但是x64 / x86与C ++ 11无关,它们似乎是不相关的问题。 - sashoalm
好的,看起来Qt库本身需要在其API中支持C++11特性,所以我错了,你的问题是正确的。你确实需要一个支持C++11的特殊Qt构建版本。不过我不知道如何解决你的问题。 - sashoalm
2
你有没有查看过 https://dev59.com/8mTWa4cB1Zd3GeqPEIer? - sashoalm
显示剩余7条评论
3个回答

2
最终我找到了一个“足够好”的解决方案,通过返回并在64位模式下重建4.8.3版本,这次确保它是使用C++11支持构建的。虽然涉及Qt5的解决方案是理想的,但我会将其保持开放一段时间,看看是否有人能够弄清楚如何做到这一点。
重要的是,我注意到我成功地从相同的提示符中构建了64位、支持C++11的4.8.3版本,这与我一直在尝试构建5.0版本的方式相同。只是更改了目录。因此,环境相同,一切都一样。我还下载了所有需要Qt5的额外先决条件。

2

刚从印刷厂出来,我看到了!非常感谢您的提醒。 - Matt Phillips
2
刚刚更加深入地研究了一下,64位版本不适用于Windows! - Matt Phillips
@MattPhillips 不,这是给Windows的。请查看以下链接: http://qt-mirror.dannhauer.de/archive/qt/5.6/5.6.0/qt-opensource-windows-x86-msvc2015_64-5.6.0.exe - Behrouz.M

0

我在 https://download.qt.io/archive/qt/4.8/4.8.5/ 找到了适用于 VC++ 项目的 Qt 4.8.5 Windows 版本 qt-win-opensource-4.8.5-vs2008.exe。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接