एक अलग टूलचेन का उपयोग करने के लिए एंड्रॉइड एनडीके को कैसे बताना है

Phonon 09/02/2017. 3 answers, 18.326 views
android android android-ndk android-ndk toolchain

मैंने एआरएम आधारित एंड्रॉइड ऐप्स बनाने के लिए एक कस्टम टूलचेन ( लिनारो ) डाउनलोड किया है। मैं एनडीके को इसका इस्तेमाल करने के लिए कैसे कहूं? क्या मैं एंड्रॉइड.एमके और एप्लीकेशन.एमके में कुछ परिभाषित या सेट कर सकता हूं जो मुझे ऐसा करने की अनुमति देगा? क्या कोई और तरीका है?

1 Comments
corbin 03/08/2012
क्या आपने उबंटू पर ऐसा किया था? आपने टूलचैन कैसे स्थापित किया?

3 Answers


Peter M 03/01/2013.

जैसा कि अन्य उत्तर उल्लेख है, $(NDK_ROOT)/toolchains/ -बिल्ड $(NDK_ROOT)/toolchains/ सिस्टम द्वारा की जाती है $(NDK_ROOT)/toolchains/ और आप वहां देखे गए विचारों को दर्पण कर सकते हैं। लेकिन गैर-एंड्रॉइड लक्ष्य प्लेटफ़ॉर्म का समर्थन करने के लिए कुछ अतिरिक्त अवधारणाएं हैं जो दिलचस्प हैं हालांकि उन्हें जल्द ही पुराना हो सकता है क्योंकि एनएनडी-बिल्ड अन्य प्लेटफार्मों का स्पष्ट रूप से समर्थन करने के लिए शुरू होता है, जैसे कि मिंगव लक्ष्यीकरण win32 (या सादे 'ओएल लिनक्स को लक्षित करने वाले अन्य जीसीसी कंपाइलर्स) ।

config.mk :

TOOLCHAIN_ABIS := (list of ABIs that the toolchain supports) 

यह एक महत्वपूर्ण परिभाषा है, क्योंकि आप किसी विशेष एबीआई के लिए टूलचेन का उपयोग करके अपने एप्लिकेशन.एमके में इस नाम का उपयोग कर सकते हैं। इस परिभाषा के उपयोग को दूषित करने के लाभों में से एक यह है कि एनएनडी-बिल्ड एक साथ कई एबीआई के लिए निर्माण कर सकता है। यह always मानता है कि मंच एंड्रॉइड है, लेकिन यदि आप एक मिंगव आधारित टूलचेन का उपयोग करके Win32 को लक्षित करना चाहते हैं, तो आप "एबीआई" को x86-win32 रूप में परिभाषित कर सकते हैं, और उसके बाद इसे अपने Application.mk में अतिरिक्त एबीआई के रूप में चुनने के लिए उपयोग कर सकते हैं। APP_ABI:= x86-win32 माध्यम से लक्ष्य APP_ABI:= x86-win32 फिर अपने TARGET_ARCH_ABI फाइलों में आप Win32 विशिष्ट स्रोतों का चयन करने के लिए TARGET_ARCH_ABI परिभाषा का उपयोग कर सकते हैं और पथ शामिल कर सकते हैं, उदाहरण के लिए:

ifeq ($(TARGET_ARCH_ABI),x86-win32)
  LOCAL_SRC_FILES += my_win32_file.c
  LOCAL_CFLAGS += -DSOME_WIN32_SPECIFIC
endif 

अंतिम टुकड़ा यह है कि आपके setup.mk लिए setup.mk में, उदाहरण के रूप में अन्य setup.mk को देखने के लिए अपर्याप्त हो सकता है, क्योंकि किसी विशेष setup.mk लिए setup.mk really में default-build-commands.mk setup.mk में बिल्ड सेटिंग्स को ओवरराइड करता है, इसलिए आप जो करना चाहते हैं वह उस फ़ाइल का निरीक्षण करता है, और उस चीज़ को फिर से परिभाषित करता है जिसे आप पसंद नहीं करते हैं।

पिछले उदाहरण के बाद, mingw द्विआधारी में नोएक्सक ध्वज का समर्थन नहीं करता है, और आप अपने setup.mk में निम्न पंक्तियों को जोड़कर इस सुविधा से छुटकारा पा सकते हैं। setup.mk :

# These flags are used to enforce the NX (no execute) security feature in the
# generated machine code. This adds a special section to the generated shared
# libraries that instruct the Linux kernel to disable code execution from
# the stack and the heap.
TARGET_NO_EXECUTE_CFLAGS  := # our platform doesn't support this flag!
TARGET_NO_EXECUTE_LDFLAGS := # our platform doesn't support this flag!

# These flags disable the above security feature
TARGET_DISABLE_NO_EXECUTE_CFLAGS  :=  # our platform doesn't support this flag!
TARGET_DISABLE_NO_EXECUTE_LDFLAGS :=  # our platform doesn't support this flag! 

यह TOOLCHAIN_NAME में कई विशेषताओं का केवल एक उदाहरण है जिसे ओवरराइड करने की आवश्यकता हो सकती है, और निश्चित रूप से TOOLCHAIN_NAME प्रदान करना महत्वपूर्ण है ताकि NDK_TOOLCHAIN को आपके Application.mk फ़ाइल के अंदर NDK_TOOLCHAIN वैरिएबल के माध्यम से चुना जा सके। एबीआई पद्धति के लिए मैंने उपरोक्त उल्लेख किया है।


Ian Ni-Lewis 09/12/2013.

एनडीके मेकफ़ाइल सिस्टम काफी विस्तार योग्य है और आप वास्तव में एक अलग टूलचेन परिभाषित कर सकते हैं। काम करने के तरीके के बारे में आपको कुछ समझने की आवश्यकता होगी।

टूलचेन्स की खोज और build/core/init.mk लाइन 261 में शुरू किया गया है (एनडीकेआर 6 में, लाइन # भविष्य के संस्करणों में बदल सकता है)। प्रारंभिक कोड $(NDK_ROOT)/toolchains/* तहत config.mk नाम की फ़ाइलों को देखता है। तो आपको config.mk निर्देशिका के तहत एक उपनिर्देशिका में अपना config.mk जोड़ना होगा, और उस उपनिर्देशिका में config.mk और setup.mk जोड़ें। उदाहरण के लिए toolchains/x86-4.4.3 और toolchains/x86-4.4.3 toolchains/arm-linux-androideabi-4.4.3 toolchains/x86-4.4.3 । यदि आपके setup.mk में मानक लेआउट है तो आपको एआरएम config.mk और setup.mk को काट और पेस्ट करने में सक्षम होना चाहिए।

एक बार NDK_TOOLCHAIN निर्देशिका में NDK_TOOLCHAIN परिभाषित करने के बाद, आप अपने Application.mk फ़ाइल के अंदर NDK_TOOLCHAIN चर सेट करके इसे स्विच कर सकते हैं।


lily 07/31/2017.

ठीक है, आप बस अपने आवेदन.एमके में "NDK_TOOLCHAIN_VERSION = 4.9" जोड़ सकते हैं

Related questions

Hot questions

Language

Popular Tags