【发布时间】:2013-01-03 10:11:37
【问题描述】:
简而言之:
- 我的 64 位 Qt 版本不支持 C++11。
- 我使用 C++11 构建的 Qt 是 32 位的。
- 使用在线安装程序的 Qt5 是 32 位的
- 尽管我生命中的最后 3 天一直致力于此,但我无法从源代码构建 64 位 Qt5。
帮助!我的环境中一定有一些不兼容的东西,但它可能是什么?
所以,我需要在 Windows 上使用 C++11 开发 64 位 Qt 应用程序。我找到了线程/指南here、here、here、here 和 here,但它们都不起作用或适用,尽管我注意到其中的第二个让我构建 Qt 4.8.3 C++11 支持(但 32 位)。第三个看起来比它应该的更复杂,并且还涉及使用 VS 2010 构建,这似乎是问题的一部分,所以我没有尝试过。我也浪费了很多时间尝试使用不同的编译器构建以前的版本,比如 mingw 和 clang,所以我很确定 cl 是我需要使用的。
基本上,我已经可以在 QtCreator 2.6.1 中构建 Qt4.8.3 并执行 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,在配置步骤中指定 -platform win32-2012,并按照
this guide 指定 QMAKE_COMPILER_DEFINES += _MSC_VER=1700 WIN32,在 win32- msvc2010 和 win32-msvc2012 mkspecs,它仍然使用 VS 2010 的 cl 构建,这会导致某种冲突。这是我的configure 命令:
配置 -static -debug-and-release -confirm-license -opensource -nomake 测试 -nomake 示例 -opengl 桌面 -no-libjpeg -platform win32-msvc2012
这是我尝试构建时的链接器失败:
在前 2 段的末尾,您可以看到包含 msvc-2010,并且在控制台输出(未显示)的前面,moc 命令中有 -D_MSC_VER=1600。
所以我很茫然,有人可以帮忙吗?
编辑:我曾说过我正在使用 Qt5 构建 64 位应用程序,实际上我能够在构建后构建 64 位应用程序(不支持 C++11) Qt 4.8.3 的。如果我用 Qt5 尝试这个,我会得到这个错误:
LNK1112:模块机器类型“X86”与目标机器类型冲突 'x64'
所以这会导致在 64 位模式下编译 Qt5,而我似乎做不到。
【问题讨论】:
-
我不认为 Qt 库本身与 C++11 支持有任何关系,您不需要 Qt DLL/库的特殊构建。
-
@satuon 我认为实际上需要兼容性,但如果不是,那么我应该能够将 C++11 与我拥有的 4.8.3 64 位版本一起使用。但是就像我说的那样,它只能使用 VS 10.0 中的 cl 编译。如果你能告诉我如何让我的 64 位版本看到 C++11 可以解决我的问题。
-
我的意思是,Qt 库只是您链接到的 DLL/lib 文件,外加一个自定义预处理器。 Qt 不是 C++ 编译器。 C++11 支持取决于您使用的编译器,在 Windows 上是 MinGW 或 MSVC。还是您的意思是 Qt Creator(IDE)?在这种情况下,由于您使用的是 Windows,因此可以改用 Visual Studio - Qt 有一个插件。它允许您将 Qt Creator 项目转换为 VS .sln 文件。
-
@satuon 您是否曾经使用过来自一个 c++ 版本的 Qt 库,用于构建另一个 Qt 应用程序?我的经验是它们需要相同,即使通常目标确实不应该关心与什么 C++ 版本相关的库是用什么编译的。我会检查插件,但我的 Qt 项目还不需要它,而且我不熟悉 VS2012。
标签: c++ visual-studio qt c++11 64-bit