【发布时间】: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。