7

python-for_android を使用して、Android で実行される kivy ベースのアプリケーションを作成しました。

アプリケーションの一部は、cython を使用して C++ で最適化されています。

Android用のpythonとカスタムレシピを使用して、すべてのコードをコンパイルすることができました。

私のコードは、Linux の下で kivy でも完全に動作します。

しかし、私の Android デバイスでは、いくつかの C++ 関数をロードできませんでした。たとえば、次のメッセージが表示されます。

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

何か案が ?

ありがとう

4

2 に答える 2

7

AndroidでC++を使用してコードを機能させることができました。

2 つの困難がありました。

1 - push_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

2 - libstl 関数を含む共有ライブラリを見つけてロードします。これは難しい部分でした:

調査の結果、stl 関数は listdc++.so ではなく libgnustl_shared.so に格納されていることがわかりました。したがって、このライブラリを 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");
于 2013-07-20T01:23:36.600 に答える