kivy: python для android + переполнение стека

Я использовал python-for_android для создания приложения на базе KIVY, работающего на Android.

Некоторые части моего приложения были оптимизированы в c ++ с использованием Cython.

Мне удается скомпилировать весь мой код, используя python для Android и пользовательские рецепты.

Мой код также отлично работает с KIVY под Linux.

Но на моем устройстве Android не удалось загрузить некоторые функции C ++. Например, я получаю сообщение:

ImportError: Cannot load library: reloc_library[1307]:  1839 cannot locate '_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E'...

Любая идея ?

Спасибо

5

Решение

Наконец-то мне удалось заставить мой код работать с использованием C ++ под Android.

Было две трудности:

1 — Доступ к заголовку c ++ из среды arm, созданной push_arm. Мне пришлось добавить правильные включения в мой рецепт и изменить стандартную переменную CXX:

    #dirty hack
export C_INCLUDE="-I$ANDROIDNDK/sources/cxx-stl/gnu-libstdc++/$TOOLCHAIN_VERSION/include/ -I$ANDROIDNDK/sources/cxx-stl/gnu-libstdc++/$TOOLCHAIN_VERSION/libs/armeabi/include/"export OLD_BOUBOU=$CC
export CC="$CXX $C_INCLUDE"
try $BUILD_PATH/python-install/bin/python.host setup.py install -O2
#try cp libgnustl_shared.so $LIBS_PATH/
try cp $ANDROIDNDK/sources/cxx-stl/gnu-libstdc++/4.4.3/libs/armeabi/libgnustl_shared.so $LIBS_PATH/

export CC=$OLD_BOUBOU

2 — Найдите общую библиотеку, содержащую функции libstl, и загрузите ее. Это была самая сложная часть:

После некоторых исследований я обнаружил, что функции stl хранятся в libgnustl_shared.so, а не в listdc ++. Таким образом, вы должны встроить эту библиотеку в свой apk.

Это цель линии try cp $ANDROIDNDK/sources/cxx-stl/gnu-libstdc++/4.4.3/libs/armeabi/libgnustl_shared.so $LIBS_PATH/

Затем вы должны загрузить его. Я изменил:

src/src/org/renpy/android/PythonActivity.java
src/src/org/renpy/android/PythonService.java
by adding this line after the others System.loadLibrary() :
System.loadLibrary("gnustl_shared");
5

Другие решения

В настоящее время я пытаюсь собрать pybox2d (с swig) через python-for-android.

Сборка, кажется, хорошо, я пытаюсь импортировать Box2D (из приложения на реальном устройстве Android) я получаю
msgstr «невозможно найти символ __cxa_end_cleanup».

К сожалению, приведенные выше исправления не помогают.
Есть другие идеи?

Обновить:
Я мог бы исправить все проблемы.
Мне пришлось связать с stlport_shared.

Вся моя работа в моей вилке https://github.com/DerThorsten/python-for-android/ . Он работает с более новыми ndks, чем оригинальный python-for-android.
И у него есть Box2D.

0

По вопросам рекламы [email protected]