मैं साइगविन के तहत एंड्रॉइड एनडीके आर 6 बी के साथ काम कर रहा हूं (सिस्टम सही ढंग से अपडेट किया गया है)। मैं एनडीके के साथ काम करना सीखने के लिए हैलो-जेनी नमूना संशोधित कर रहा हूं। चूंकि मेरे पास सी ++ में लिखी गई लाइब्रेरी है, जिसे मैं हैलो-जेनी में उपयोग करना चाहता हूं (वास्तव में, मैंने एक prj बनाया है जिसे एक एकल .cpp फ़ाइल कहा जाता है जिसे ndkfoo.cpp कहा जाता है) नमूना, मैंने एक्लिप्स में एक नया एंड्रॉइड प्रोजेक्ट बनाया है (एंड्रॉइड के लिए अपडेट किया गया), एक जेएनआई निर्देशिका जोड़ा, एक एंड्रॉइड.एमके और एप्लीकेशन.एमके फाइलों को जोड़ा, उन्हें .cpp संकलित करने के लिए संपादित किया। संकलन के अंत में, मुझे प्राप्त होता है। इसलिए फ़ाइल।एंड्रॉइड एनडीके - बाहरी पुस्तकालय को जोड़ने में समस्या (इसे नहीं मिला)
अब, helloworld Android.mk में, मुझे उस पुस्तकालय को शामिल करने के लिए लिंकर को बताने के लिए कुछ संपादन करने की आवश्यकता है। मान लीजिए पुस्तकालय फ़ाइल libmylib.so है, मैं है निम्नलिखित android.mk स्क्रिप्ट:
LOCAL_PATH: = $ (मेरी-निर्देशिका कहते हैं)
शामिल $ (CLEAR_VARS)
LOCAL_MODULE: = ndkfoo
LOCAL_SRC_FILES: = ndkfoo.cpp
LOCAL_C_INCLUDES + = $ (LOCAL_PATH)/mylib
LOCAL_LDLIBS + = एल $ (LOCAL_PATH) /../../ mylib/libs/armeabi/-lmylib
$ (BUILD_SHARED_LIBRARY) शामिल
मेरे निर्देशिका निम्नलिखित तरीके से संगठित किया गया है:
d:/android/android-ndk-r6b => android ndk root
d:/android/workspace/helloworld => helloworld project
d:/android/workspace/mylib => mylib project library
(इसलिए, libmylib.so का मार्ग है: डी:/एंड्रॉइड/वर्कस्पेस/mylib/libs/armeabi)।
दुर्भाग्य से, यह काम नहीं लगता है। अगर मैं ndkfoo.cpp से mylib पर प्रत्येक संदर्भ को हटा देता हूं, तो यह मेरे फोन पर भी संकलित और चलाता है। अगर मैं mylib के लिए संदर्भ को दूर नहीं करते हैं, यह लेकिन लिंक doens't संकलित: मैं निम्नलिखित परिणाम प्राप्त:
डी: /android/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4। 3/प्रीबिल्ट/विंडो डब्ल्यूएस/बिन /../ lib/gcc/arm-linux-androideabi/4.4.3 /../../../../ arm-linux-androideabi/ बिन/एलडी। exe: नहीं मिल सकता -lmylib
Ps। मैं उल्लेख करना भूल गया कि मैं helloworld परियोजना की jni निर्देशिका के तहत ndk-buld चलाता हूं। Pss। मुझे इंटरनेट पर बहुत सारे प्रश्न मिल गए हैं। मैं हमेशा दृश्य C/C++ IDE के साथ काम किया है, तो मैं जीसीसी, makefiles को वास्तव में नया हूँ और इतने पर ...
ठीक है, इस समस्या को हल करने के लिए कैसे मिल गया। कुछ अजीब कारणों के लिए जो मुझे समझ में नहीं आता है, -एल/साइग्राइड/डी/एंड्रॉइड/वर्कस्पेस/mylib/libs/armeabi के रूप में निर्दिष्ट पथ काम नहीं करता है (और यही वजह है कि LOCAL_PATH का उपयोग किसी त्रुटि में होता है)। इसके बजाए, -एलडी:/एंड्रॉइड/वर्कस्पेस/mylib/libs/armeabi या -L ../../ mylib/libs/armeabi का उपयोग कर काम करता है। मुझे लगता है कि साइगविन यहां समस्या है ... – Luke
आपकी टिप्पणी को जवाब के रूप में पोस्ट करें यदि यह आपकी समस्या हल करता है –