2013-07-19 11 views
5

के लिए पायथन मैंने एंड्रॉइड पर चल रहे एक किवी आधारित एप्लिकेशन को बनाने के लिए पायथन-for_android का उपयोग किया है।kivy: एंड्रॉइड + सी ++

मेरे आवेदन के कुछ हिस्सों को साइथन का उपयोग करके सी ++ में अनुकूलित किया गया है।

मैं एंड्रॉइड और कस्टम व्यंजनों के लिए अजगर का उपयोग करके अपने सभी कोड संकलित करने का प्रबंधन करता हूं।

मेरा कोड लिनक्स के तहत पूरी तरह से किवी के साथ भी काम करता है।

लेकिन मेरे एंड्रॉइड डिवाइस पर, यह कुछ सी ++ फ़ंक्शन लोड करने में विफल रहा। उदाहरण के लिए, मुझे संदेश मिलता है:

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

कोई विचार?

धन्यवाद

उत्तर

5

मैं अंत में एंड्रॉयड के तहत C++ का उपयोग कर मेरे कोड काम करने के लिए प्रबंधित किया है। push_arm द्वारा बनाई हाथ पर्यावरण से C++ शीर्ष लेख तक पहुंच -

1:

दो कठिनाइयों थे। साझा लाइब्रेरी libstl कार्यों युक्त खोजें, और इसे लोड -

#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: मैं जोड़ने के लिए सही भी शामिल है मेरी नुस्खा में, और डिफ़ॉल्ट CXX वर को संशोधित किया था। यह कठिन हिस्सा था:

कुछ शोध के बाद, मुझे पता चलता है कि stl फ़ंक्शन libgnustl_shared.so में संग्रहीत हैं, और listdC++ नहीं। तो आपको इस पुस्तकालय को अपने एपीके में एम्बेड करना होगा।

इस लाइन 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"); 
0

मैं वर्तमान में पाइथन-एंड-एंड्रॉइड के माध्यम से pybox2d (swig के साथ) बनाने की कोशिश कर रहा हूं।

बिल्ड ठीक इकाई प्रतीत होता है, मैं बॉक्स 2 डी आयात करने की कोशिश करता हूं (वास्तविक एंड्रॉइड डिवाइस पर ऐप से) मुझे मिलता है "प्रतीक __cxa_end_cleanup का पता नहीं लगा सकता"।

दुर्भाग्यवश उपर्युक्त फिक्स काम नहीं करता है। कोई अन्य विचार?

अद्यतन: मैं सभी मुद्दों को ठीक कर सकता हूं। मुझे stlport_shared के खिलाफ लिंक करना पड़ा।

मेरा पूरा काम https://github.com/DerThorsten/python-for-android/ के मेरे कांटा में है। यह नए ndks के साथ काम करता है तो मूल पायथन-एंड्रॉइड के लिए। और इसमें बॉक्स 2 डी है।

संबंधित मुद्दे