【发布时间】:2014-11-20 08:56:21
【问题描述】:
阅读了很多关于 Make 和 NDK 的帖子后,我仍然无法获得 c++11 的支持。
在我的 Application.mk 文件中:
NDK_TOOLCHAIN_VERSION := clang
APP_CPPFLAGS += -std=c++11
APP_STL := gnustl_static
APP_BUILD_SCRIPT := Android.mk
然后在我的 Android.mk 文件中:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Core
# =======================================================================
# Includes Directories
# =======================================================================
LOCAL_C_INCLUDES := ${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/4.8/include
LOCAL_C_INCLUDES += ${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi/Include
# Boost:
LOCAL_C_INCLUDES += $(BOOST_PATH)
# Python:
LOCAL_C_INCLUDES += $(PYTHON_PATH)
# Core Includes:
LOCAL_C_INCLUDES += $(LOCAL_PATH)/Core
LOCAL_SRC_FILES := /Sources/FluxV3/Sources/DotFlux/Core/Application/AppBase.cpp
include $(BUILD_STATIC_LIBRARY)
然后在 ndk-build 日志中我有这个消息:
在 /Sources/Android/SDK/android-ndk-r10b/sources/cxx-stl/gnu-libstdc++/4.8/include/initializer_list:36:0 包含的文件中, 来自 /Sources/Boost-for-Android-master/boost_1_53_0/boost/smart_ptr/make_shared_array.hpp:18, 来自/Sources/Boost-for-Android-master/boost_1_53_0/boost/smart_ptr/make_shared.hpp:18, 来自/Sources/Boost-for-Android-master/boost_1_53_0/boost/make_shared.hpp:15, 来自 /Sources/FluxV3/Sources/DotFlux/Core/OSMin.hpp:114, 来自 /Sources/FluxV3/Sources/DotFlux/CoreDef.hpp:34, 来自 /Sources/FluxV3/Sources/DotFlux/CoreMin.hpp:26, 来自 /Sources/FluxV3/Sources/DotFlux/CoreBase.hpp:26, 来自 /Sources/FluxV3/Sources/DotFlux/Core.hpp:26, 来自/Sources/FluxV3/Sources/DotFlux/Core/PCH/pch.hpp:24, 来自/Sources/FluxV3/Sources/DotFlux/Core/Application/AppBase.cpp:21: /Sources/Android/SDK/android-ndk-r10b/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/c++0x_warning.h:32:2: error: #error 这个文件需要编译器和库支持 ISO C++ 2011 标准。此支持目前是实验性的,必须使用 -std=c++11 或 -std=gnu++11 编译器选项启用。
另一件事是我的代码中没有 Android 预处理器。
任何帮助都会很好。 谢谢。
编辑:
/Sources/Android/SDK/android-ndk-r10b/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g++ -MMD -MP -MF ./obj /local/armeabi/objs/Core//Sources/FluxV3/Sources/DotFlux/Core/Application/AppBase.od -fpic -ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -march=armv5te - mtune=xscale -msoft-float -fno-exceptions -fno-rtti -mthumb -Os -g -DNDEBUG -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -I/Sources/FluxV3/Sources/ DotFlux/Core -I/Sources/FluxV3/Sources/DotFlux/Core/PCH -I/Sources/Boost-for-Android-master/boost_1_53_0 -I/Sources/Android/SDK/android-ndk-r10b/sources/cxx- stl/gnu-libstdc++/4.8/include -I/Sources/Android/SDK/android-ndk-r10b/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi/Include -I/Sources/Android/SDK/ android-ndk-r10b/sources/cxx-stl/system/include -I/Sources/FluxV3/Sources/DotFlux -DANDROID -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11 -pthread -I/Sources/Android/SDK/android- ndk-r10b/platforms/android-3/arch-arm/usr/include -c /Sources/FluxV3/Sources/DotFlux/Core/Application/AppBase.cpp -o ./obj/local/armeabi/objs/Core// Sources/FluxV3/Sources/DotFlux/Core/Application/AppBase.o
我们看到设置了std=c++11和-pthread。
【问题讨论】:
-
检查您的 Application.mk 文件。即使它将 clang 设置为工具链,所使用的编译器也是 GCC 4.6(来自您的最后一次编辑)。尝试将工具链设置为 4.8,看看它是否有任何变化。
-
知道了!感谢您的提示。实际上 Clang 不适合。
-
知道了!感谢您的提示。实际上 Clang 是不合适的。 GCC4.6 完成了这项工作。
-
在 GCC 4.8 或 4.9 及更高版本中使用 NDK。如果您因合同义务需要切换到 STLport,请参阅 AOSP 错误跟踪器上的Issue 216331: STLport does not support C++11。
标签: android c++11 makefile android-ndk