2011-09-09 5 views
5

मैं साइगविन के तहत एंड्रॉइड एनडीके आर 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 को वास्तव में नया हूँ और इतने पर ...

+1

ठीक है, इस समस्या को हल करने के लिए कैसे मिल गया। कुछ अजीब कारणों के लिए जो मुझे समझ में नहीं आता है, -एल/​​साइग्राइड/डी/एंड्रॉइड/वर्कस्पेस/mylib/libs/armeabi के रूप में निर्दिष्ट पथ काम नहीं करता है (और यही वजह है कि LOCAL_PATH का उपयोग किसी त्रुटि में होता है)। इसके बजाए, -एलडी:/एंड्रॉइड/वर्कस्पेस/mylib/libs/armeabi या -L ../../ mylib/libs/armeabi का उपयोग कर काम करता है। मुझे लगता है कि साइगविन यहां समस्या है ... – Luke

+0

आपकी टिप्पणी को जवाब के रूप में पोस्ट करें यदि यह आपकी समस्या हल करता है –

उत्तर

1

संदेश

डी:/एंड्रॉयड/android-NDK-r6b/toolchains /arm-linux-androideabi-4.4.3/prebuilt/windo ws/bin /../ lib/gcc/arm-linux-androideabi/4.4.3 /../../../../ arm-linux -androideabi/bin/ld.exe: नहीं मिल रहा है -lmylib

आप यह दर्शाता है कि लिंकर अपने पुस्तकालय नहीं मिल रहा है, यह LD_LIBS 'रास्ते में एक समस्या से आनी चाहिए।

मुझे लगता है कि मेरे-डीआईआर मैक्रो में डिवाइस 'इकाई पहचानकर्ता शामिल नहीं है, इसलिए, आपके LOCAL_PATH चर को डी को याद करना चाहिए: और, मुझे लगता है, साइगविन के साथ काम नहीं करेगा। यदि आप द्वारा

LOCAL_PATH := D:$(call my-dir) 

यह काम करना चाहिए

LOCAL_PATH := $(call my-dir) 

की जगह मैं एक लिनक्स उपयोगकर्ता हूँ और मैं 100% यकीन नहीं है लेकिन,। दूसरी ओर आप हमेशा की स्थापना करके रिश्तेदार पथ सेट कर सकते हैं:

LOCAL_LDLIBS += -L$../../mylib/libs/armeabi/ -lmylib 
संबंधित मुद्दे