Поддержка 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?
Ответы
Ответ 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С++?