Как создать нативную библиотеку C ++ на Android? - PullRequest
8 голосов
/ 30 июня 2010

Мне нужно написать библиотеку динамических ссылок на 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. Я плохо разбираюсь в * nix, так что лучше под Windows

UPD: Я установил Android NDK и Cygwin и добавил их в переменную среды PATH

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

Ответы [ 3 ]

2 голосов
/ 09 июля 2010

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

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

public native String  stringFromJNI();

static {
    System.loadLibrary("hello-jni");
}
1 голос
/ 30 июня 2010

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

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

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

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

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

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

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

0 голосов
/ 30 июня 2010

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

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

...