Android std和stl支持

时间:2011-09-07 19:07:10

标签: 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,有哪些步骤?

1 个答案:

答案 0 :(得分:14)

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

  

默认情况下,最小C ++运行时系统的头文件和库   在构建C ++源代码时使用库(/system/lib/libstdc++.so)。

     

但是,您可以通过设置变量来选择不同的实现   APP_STL到Application.mk中的其他内容,例如:

     

APP_STL:= stlport_static

     

选择此NDK提供的静态STLport实现。   值APP_STL值如下:

     

系统 - &gt;使用默认的最小C ++运行时库      stlport_static - &gt;使用构建为静态库的STLport      stlport_shared - &gt;使用构建为共享库的STLport      gnustl_static - &gt;使用GNU libstdc ++作为静态库。

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