Подтвердить что ты не робот

Поддержка Android std и stl

Я играю с android ndk. Я использую Window Vista с cygwin (последняя версия). Я скомпилировал и запустил приветственный образец jni world на моем телефоне. Это работает. Код (является .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);

но компилятор говорит, что он не может найти алгоритм файла и что min() не является частью std.

После небольшого поиска я обнаружил, что у android ndk есть каталог gnu-libstdС++ со всеми необходимыми файлами std. Читая документы NDK, я узнал, что usint std:: * должен работать без каких-либо изменений кода (если в него включены правильные файлы заголовков). Но похоже, что gcc на cygwin не может найти нужные файлы.

Каковы шаги, которые необходимо предпринять, чтобы использовать std и stl в файле .cpp в приложении Android ndk?

4b9b3361

Ответ 1

Из NDK r5 docs/CPLUSPLUS-SUPPORT.html:

По умолчанию заголовки и библиотеки для минимальной системы времени выполнения С++ library (/system/lib/libstdc++.so) используются при создании источников С++.

Однако вы можете выбрать другую реализацию, установив переменную APP_STL для чего-то еще в вашем Application.mk, например:

APP_STL: = stlport_static

Чтобы выбрать статическую реализацию STLport, предоставляемую этим NDK. Значения значения APP_STL следующие:

system → Использовать минимальную библиотеку времени выполнения С++ по умолчанию.
   stlport_static → Использовать STLport, созданный как статическая библиотека.
   stlport_shared → Использовать STLport, построенный как общая библиотека.
   gnustl_static → Используйте GNU libstdС++ как статическую библиотеку.

Какой NDK вы используете? Вы пытались скомпилировать один из примеров приложений, которые используют STL, например test-libstdС++?