Android std和stl支持

Luk*_*uke 10 c++ android std c++-standard-library android-ndk

我正在玩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!");
} 
Run Code Online (Sandbox Code Playgroud)

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

#include <algorithm>
Run Code Online (Sandbox Code Playgroud)

然后,在上面的函数中,我补充说:

int a;
a=std::min<int>(10, 5);
Run Code Online (Sandbox Code Playgroud)

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

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

为了能够在android ndk应用程序中的.cpp文件中使用std和stl,有哪些步骤?

NuS*_*ler 14

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

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

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

APP_STL:= stlport_static

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

system - >使用默认的最小C++运行时库.
stlport_static - >使用构建为静态库的STLport.
stlport_shared - >使用构建为共享库的STLport.
gnustl_static - >使用GNU libstdc ++作为静态库.

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

  • 好的,我解决了.我将APP_STL:= stlport_static添加到我的应用程序的Android.mk中,而不是添加到名为Application.mk的文件中(在/ jni目录中).我有另一个问题:我如何使用预编译的stlport lib?我问这个是因为它为每个项目重新编译它(也就是说,如果我使用stl_port启动一个新的prj,第一次运行ndk-build,它将编译stl端口). (7认同)