Поддержка Android STD и STL - PullRequest
       16

Поддержка Android STD и STL

10 голосов
/ 07 сентября 2011

Я играю с Android ndk. Я использую Window Vista с Cygwin (последняя версия). Я скомпилировал и запустил на своем телефоне пример 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);

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

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

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

1 Ответ

14 голосов
/ 08 сентября 2011

Из документов NDK r5 / CPLUSPLUS-SUPPORT.html:

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

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

APP_STL: = stlport_static

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

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

Какой НДК вы используете? Вы пытались скомпилировать одно из примеров приложений, использующих STL, например test-libstdc ++?

...