Я должен записать динамически подключаемую библиотеку в 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 решила проблему.
Возможно, вам понадобится 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. Тогда это должно сработать.
Посмотрите образцы, которые поставляются с NDK. Вам необходимо использовать привязки JNI, чтобы он мог взаимодействовать с Java. Под этими привязками вы можете делать все, что захотите, но все, что должно быть доступно из Java, должно проходить через привязки JNI. Все, что НЕ ТРЕБУЕТ быть доступным, можно написать так же, как обычно.
И да, это прекрасно под окнами.
В вашем примере используйте g ++ вместо gcc, это программа на C ++.
Посмотрите пример hello-jni в NDK. Вам необходимо создать свою общую библиотеку с помощью NDK и импортировать ее в проект Java Android. В коде Java вам нужно объявить собственные функции с помощью «native» и добавить библиотеку с помощью static; см. фрагмент ниже.
public native String stringFromJNI();
static {
System.loadLibrary("hello-jni");
}