Я использовал 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'...
Любая идея ?
Спасибо
Наконец-то мне удалось заставить мой код работать с использованием 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");
В настоящее время я пытаюсь собрать 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.