【问题标题】:NDK r10b and c++11 featuresNDK r10b 和 c++11 功能
【发布时间】: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


【解决方案1】:

我从 user1906 回答:

“检查您的 Application.mk 文件。即使它将 clang 设置为工具链,但使用的编译器是 GCC 4.6(来自您上次编辑)。尝试将工具链设置为 4.8,看看它是否有任何改变。“

【讨论】:

    猜你喜欢
    • 2013-06-13
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多