【问题标题】:Can not use C++11 in Qt不能在 Qt 中使用 C++11
【发布时间】:2016-10-31 19:45:09
【问题描述】:

自 Qt 5.7 起,C++11 支持是强制性的。出于某种原因,一个大型旧项目不接受 C++11 参数。我是否使用“CONFIG += c++11”或任何其他都没关系;仅 C++11 的功能不起作用,因此我无法编译该项目。

C:\QtE\5.7\android_armv7\include\QtCore\qbasicatomic.h:61: 错误: 错误“Qt 需要 C++11 支持” ^

如果我在 .pro 文件中使用“CONFIG += c++11”,编译器参数确实包含“-std=c++11 -std=c++0x”。目标平台是 Android ArmV7。使用 SDK R24 和 NDK R10E。

C:\SDKs\Android\android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/windows/bin/arm-linux-androideabi-g++ -c -Wno-psabi -march=armv7- a -mfloat-abi=softfp -mfpu=vfp -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -DANDROID -Wa,--noexecstack -fno-builtin-memmove -std=c++11 -fPIC -ansi -fpermissive -finline-functions -Wno-long-long -g -g -marm -O0 -fno-omit-frame-pointer -O2 -Wall -Wno-psabi -W -D_REENTRANT -fPIC -DPJ_IS_LITTLE_ENDIAN=1 -DPJ_IS_BIG_ENDIAN = 0 -DQZXING_LIBRARY -DZXING_ICONV_CONST -DDISABLE_LIBRARY_FEATURES -DNOFMAXL -DBOTAN_DLL = Q_DECL_EXPORT -DBOTAN_TARGET_OS_HAS_GETTIMEOFDAY -DBOTAN_HAS_ALLOC_MMAP -DBOTAN_HAS_ENTROPY_SRC_DEV_RANDOM -DBOTAN_HAS_ENTROPY_SRC_EGD -DBOTAN_HAS_ENTROPY_SRC_FTW -DBOTAN_HAS_ENTROPY_SRC_UNIX -DBOTAN_HAS_MUTEX_PTHREAD -DBOTAN_HAS_PIPE_UNIXFD_IO -DBOTAN_TARGET_OS_IS_LINUX -DBOTAN_TARGET_OS_HAS_CLOCK_GETTIME -DBOTAN_TARGET_OS_HAS_DLOPEN -DBOTAN_TARGET_OS_HAS_GMTIME_R -DBOTAN_TARGET_OS_HAS_POSIX_MLOCK -DBOTAN_HAS_DYNA MICALLY_LOADED_ENGINE -DBOTAN_HAS_DYNAMIC_LOADER -DBOTAN_BUILD_COMPILER_IS_GCC -DQT_QML_DEBUG -DQT_QUICKWIDGETS_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_WEBSOCKETS_LIB -DQT_NETWORK_LIB -DQT_POSITIONING_LIB -DQT_ANDROIDEXTRAS_LIB -DQT_CORE_LIB P>

欢迎任何想法:)

【问题讨论】:

  • 您是否尝试过将 C++ 中的“C”大写?如果我没记错的话,我读过的所有文档都有这样的内容。
  • Qt 不是编译器,是 C++ 编译器决定它是编译 C++98 还是 C++11。
  • 如果您在编译器命令行中有-std=c++11,则qmake 部分应该可以正常工作。也许编译器太老了,不知道 C++11?是哪一个?
  • NDK10E 显然包含绝对支持 C++11 的 GCC 4.8 编译器。
  • 我怀疑问题出在-ansi 选项上。根据 GCC 手册,这相当于 -std=c++98

标签: qt c++11


【解决方案1】:

根据this questions 接受的答案,它说CONFIG += c++11 需要Qt 5。您确定您使用的是Qt 5?

另外,它还说如果你使用 gcc/clang,你应该使用QMAKE_CXXFLAGS += -std=c++11(或QMAKE_CXXFLAGS += -std=c++0x)。

由于您正在构建一个 android 项目,它将使用 gcc。将CONFIG += c++11 更改为QMAKE_CXXFLAGS += -std=c++11 并告诉我发生了什么。

【讨论】:

  • 确定我使用的是 Qt5。 “QMAKE_CXXFLAGS += -std=c++11”和“QMAKE_CXXFLAGS += -std=c++0x”的错误相同。所有结果都在 "C:\QtE\5.7\android_armv7\include/QtCore/qbasicatomic.h:61:4: error: #error "Qt requires C++11 support""
  • 那你到底有什么版本?
  • 你可以尝试添加QMAKE_LFLAGS += -std=c++11吗?
  • 或将QMAKE_CXXFLAGS += -std=c++11 更改为gcc:QMAKE_CXXFLAGS += -std=c++11
  • 嘿,很抱歉回复晚了。全部尝试,结果相同“Qt 需要 C++11 支持”
【解决方案2】:

其中一个 .pri 子项目使用参数“-ansi”,等效于“-std=c++98”。这会阻止使用 C++11 进行编译。

感谢 Oktalist 的解决方案评论 :)

【讨论】:

    猜你喜欢
    • 2013-07-04
    • 2013-07-28
    • 2013-05-22
    • 2012-09-03
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多