2011-06-03 12 views
8

मैं उबंटू 10.10 पर आर 5 बी एनडीके का उपयोग करके एंड्रॉइड मंच के लिए हमारे सी ++ कोड बेस (सीएमके का उपयोग करके) को पार करने का प्रयास कर रहा हूं। संकलन चरण सफल होता है, हालांकि, अंतिम लिंक चरण के दौरान .so में libsupC++ में प्रतीकों के कई अनसुलझे संदर्भ हैं। एक फ़ाइल (जिसे मैं लिंक करने के लिए निर्दिष्ट करता हूं)। मैंने कोई फर्क नहीं पड़ता -lsupC++ भी कोशिश की है।एंड्रॉइड एनडीके आर 5 बी बाहरी निर्माण और supC++ लिंक समस्या

मैंने परीक्षण-gnustl-1 एनडीके परीक्षण ऐप बनाने के दौरान आधिकारिक एनडीके-बिल्ड सिस्टम द्वारा उत्पन्न जितनी संभव हो सके कमांड लाइन का पालन करने का प्रयास किया।

हाथ-लिनक्स-एंड्रोइडबी/lib/libsupC++ पर आर्म-लिनक्स-एंड्रोइडबी-एनएम उपकरण चलाना। एक फ़ाइल त्रुटि आउटपुट में संदर्भित परिभाषित (टी) के रूप में प्रतीकों को दिखाती है।

प्रतीक libsupc में परिभाषित का एक उदाहरण ++ यह नहीं मिल रहा है: __gxx_personality_v0

यहाँ मेरी नमूना लिंक लाइन और त्रुटियों की एक परिणामस्वरूप नमूना है।

/home/user/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-g++ -fPIC -Wall -Wextra -Wno-unused -Wno-multichar -fno-rtti -MMD -MP -MF -ffunction-sections -fexceptions -funwind-tables -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -Wa,--noexecstack -DANDROID -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -O0 -DDEBUG -D_DEBUG -g --sysroot=/home/user/android-ndk-r5b/platforms/android-9/arch-arm -Wl,--gc-sections -Wl,-z,nocopyreloc -Wl,--no-undefined,-z,noexecstack -L/home/user/android-ndk-r5b/platforms/android-9/arch-arm/usr/lib -L/home/user/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/arm-linux-androideabi/lib -Wl,-rpath-link=/home/user/android-ndk-r5b/platforms/android-9/arch-arm/usr/lib /home/user/android-ndk-r5b/sources/cxx-stl/gnu-libstdc++/libs/armeabi/libstdc++.a -lc -lsupc++ -shared -o ../../lib/Debug/libFoo.so CMakeFiles/Foo.dir/Foo.c.o CMakeFiles/Foo.dir/Bar.cpp.o CMakeFiles/Foo.dir/Baz.cpp.o

`CMakeFiles/Foo.dir/Foo.cpp.o: In function 'myFunc': 
/home/user/myroj/src/native/modules/libFoo/Foo.cpp:292: undefined reference to '__cxa_end_cleanup' 
CMakeFiles/Foo.dir/Foo.cpp.o:(.ARM.extab.text.myFunc+0x0): undefined reference to '__gxx_personality_v0' 
... 
/home/user/android-ndk-r5b/toolchains/android/sources/cxx-stl/gnu-libstdc++/include/bits/vector.tcc:350: undefined reference to '__cxa_begin_catch' 
/home/user/android-ndk-r5b/toolchains/android/sources/cxx-stl/gnu-libstdc++/include/bits/vector.tcc:357: undefined reference to '__cxa_rethrow' 
/home/user/android-ndk-r5b/toolchains/android/sources/cxx-stl/gnu-libstdc++/include/bits/stl_vector.h:1153: undefined reference to 'std::__throw_length_error(char const*)' 
/home/user/android-ndk-r5b/toolchains/android/sources/cxx-stl/gnu-libstdc++/include/bits/stl_tree.h:199: undefined reference to 'std::_Rb_tree_decrement(std::_Rb_tree_node_base*)' 
... 

मुझे लगता है कि एक साधारण .a फ़ाइल में अपवाद और लिंक का उपयोग करता है एक सरल नमस्ते दुनिया एप्लिकेशन बनाने की कोशिश की। जब तक मैं libsupC++ में लिंक नहीं करता तब तक मुझे वही त्रुटियां मिलती हैं। '-lsupC++' का उपयोग करने के बजाय सीधे लाइब्रेरी। हालांकि, यह वही तकनीक बड़े प्रोजेक्ट लिंक चरण पर काम नहीं करती है। बाहरी निर्माण उपकरण का उपयोग करते समय एनडीके दस्तावेज़ों का भी सुझाव है कि '-lsupC++' का उपयोग किया जाना चाहिए।

मैं इस लिंकिंग समस्या को हल करने के तरीकों से बाहर हूं। मैंने लिंक लाइन को कई तरीकों से पुन: व्यवस्थित करने का प्रयास किया है जैसा कि मैं सोच सकता हूं। मुझे पता है कि सामान्य रूप से लिंकिंग एक फिकल प्रक्रिया हो सकती है। किसी भी मदद की बहुत सराहना की है।

उत्तर

6

यह पता चला है कि मुझे पथ में -L/home/user/android-ndk-r5b/sources/cxx-stl/gnu-libstdc++/libs/armeabi" जोड़ने की आवश्यकता है और "--start-group --end-group" खंड में लिपटे सभी पुस्तकालयों के साथ स्पष्ट रूप से लिंक करें "/ home/user/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/arm-linux-androideabi/lib/thumb/libsupc++.a"।

उम्मीद है कि यह किसी और की भी मदद करता है।

+1

एक निराशाजनक समाधान, लेकिन ... ठीक है। : / – paniq

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