kivy:用于android + C++的python

use*_*846 6 c++ python kivy

我已经使用python-for_android来创建一个在android上运行的基于kivy的应用程序.

我的应用程序的某些部分已使用cython在c ++中进行了优化.

我设法使用python for android和自定义配方编译我的所有代码.

我的代码也适用于linux下的kivy.

但在我的Android设备上,它无法加载一些c ++函数.例如,我收到消息:

ImportError: Cannot load library: reloc_library[1307]:  1839 cannot locate '_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E'...
Run Code Online (Sandbox Code Playgroud)

任何的想法 ?

谢谢

use*_*846 6

我终于设法让我的代码在android下使用C++.

有两个困难:

1 - 从push_arm创建的arm环境访问c ++头.我必须在我的食谱中添加正确的包含,并修改默认的CXX var:

    #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
Run Code Online (Sandbox Code Playgroud)

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");
Run Code Online (Sandbox Code Playgroud)