Как создать собственную библиотеку C++ по Android?

Я должен записать динамически подключаемую библиотеку в C++, который используется Java на Android. Поскольку я добираюсь, это должна быть .so библиотека, но я не знаю, как сделать это. Я попробовал Cygwin, но он отказывает:

$ gcc 1.cpp

/usr/lib/gcc/i686-pc-cygwin/4.3.4/./../../../i686-pc-cygwin/bin/ld: не может найти-luser32 collect2: ld возвратил 1 статус выхода

1.cpp:
int main(int, char**)
{
   return 0;
}

Кто-либо может помочь мне с этим?

P.S. Я не хорош в *, отклоняют, таким образом, это должно быть лучше сделано в соответствии с Windows

UPD: я установил и Android NDK и Cygwin и добавил их к переменной окружения PATH

UPD2: Спасибо за помощь. Проблема была с самим Cygwin. Переустановка его и NDK решила проблему.

8
задан JoshDM 31 July 2019 в 20:54
поделиться

3 ответа

Возможно, вам понадобится Android NDK для компиляции и компоновки собственных библиотек на Android. Cygwin и windows должны работать (cygwin предоставляет необходимые инструменты * nix).

Мне кажется, что вы скомпилировали исходный код c ++ для среды WINTEL, которая полностью отличается от телефонов Android. Так что, если вы загрузите эту библиотеку в телефон, она обязательно выйдет из строя / вообще не будет работать.

Вот статья, которая может помочь . Он охватывает часть android-ndk / cygwin и должен содержать некоторые указатели на дополнительную информацию.

РЕДАКТИРОВАТЬ

вздох - передал часть сообщения об ошибке в Google и был удивлен, что с библиотекой user32 нет результатов ... потом я понял, что часть -luser32 эффективно удалили все связанные ссылки user32 из списка результатов;)

Это наиболее многообещающая ссылка: http://www.cygwin.com/ml/cygwin/2003-01/msg00292 .html

Обычно - запустите программу установки cygwin и добавьте пакет, содержащий user32 lib. Тогда это должно сработать.

1
ответ дан 6 December 2019 в 00:54
поделиться

Посмотрите образцы, которые поставляются с NDK. Вам необходимо использовать привязки JNI, чтобы он мог взаимодействовать с Java. Под этими привязками вы можете делать все, что захотите, но все, что должно быть доступно из Java, должно проходить через привязки JNI. Все, что НЕ ТРЕБУЕТ быть доступным, можно написать так же, как обычно.

И да, это прекрасно под окнами.

0
ответ дан 6 December 2019 в 00:54
поделиться

В вашем примере используйте g ++ вместо gcc, это программа на C ++.

Посмотрите пример hello-jni в NDK. Вам необходимо создать свою общую библиотеку с помощью NDK и импортировать ее в проект Java Android. В коде Java вам нужно объявить собственные функции с помощью «native» и добавить библиотеку с помощью static; см. фрагмент ниже.

public native String  stringFromJNI();

static {
    System.loadLibrary("hello-jni");
}
2
ответ дан 6 December 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: