Android 标准和 STL 支持

标签 android c++ android-ndk std c++-standard-library

我正在玩android ndk。我正在使用带有 cygwin(最新版本)的 Window Vista。我在手机上编译并启动了 hello world jni 示例。这是工作。代码是(是一个.cpp文件):

#include <string.h>
#include <jni.h>

extern "C" {
JNIEXPORT jstring JNICALL     Java_org_android_helloworld_HelloworldActivity_invokeNativeFunction(JNIEnv* env, jobject     javaThis);
};


jstring Java_org_android_helloworld_HelloworldActivity_invokeNativeFunction(JNIEnv*     env, jobject javaThis)
{
    return  env->NewStringUTF("Hello from native code!");
} 

我想添加一些修改,只是想玩一下:

#include <algorithm>

然后,在上面的函数中,我添加了:

int a;
a=std::min<int>(10, 5);

但是编译器说它找不到文件“algorithm”并且 min() 不是 std 的一部分。

经过一些搜索,我发现 android ndk 有一个 gnu-libstdc++ 目录,其中包含所有需要的 std 文件。阅读 NDK 文档,我了解到 usint std::* 应该可以在不对代码进行任何修改的情况下工作(如果代码包含正确的头文件)。但似乎 cygwin 上的 gcc 无法找到所需的文件。

为了能够在 android ndk 应用程序的 .cpp 文件中使用 std 和 STL,需要执行哪些步骤?

最佳答案

来自 NDK r5 的文档/CPLUSPLUS-SUPPORT.html:

By default, the headers and libraries for the minimal C++ runtime system library (/system/lib/libstdc++.so) are used when building C++ sources.

You can however select a different implementation by setting the variable APP_STL to something else in your Application.mk, for example:

APP_STL := stlport_static

To select the static STLport implementation provided with this NDK. Value APP_STL values are the following:

system -> Use the default minimal C++ runtime library.
stlport_static -> Use STLport built as a static library.
stlport_shared -> Use STLport built as a shared library.
gnustl_static -> Use GNU libstdc++ as a static library.

您使用的是哪个 NDK?您是否尝试过编译使用 STL 的示例应用程序之一,例如 test-libstdc++?

关于Android 标准和 STL 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7339229/

相关文章:

java - 插入后获取生成的id

c++ - 这个用于 SDL 类型的智能指针包装器安全吗?

c++ - clSetKernelArg 抛出 EXC_BAD_ACCESS

c++ - 静态变量输入时存储什么值?

android - 使用 OpenSL 播放生成声音

android - 为什么我的水平 LinearLayout 没有为其内容保留足够的高度?

Android Binder 清除调用者身份

android - 如何从 Activity 调用 DialogFragment

Linux 声称 android (arm-eabi-gcc) 明显存在时不存在

android - 如何使用 CMakeLists.txt 和 AndroidStudio 在 Android-NDK 项目中集成 libxml2 原生库?