2011-12-25 10 views
7

जबकि कुछ सी में लिखे स्रोतों के साथ काम ++ मैं उन मैक्रो पाया:JNIEXPORT और एंड्रॉयड में JNICALL NDK

JNIEXPORT return_type JNICALL function_name (...) { हालांकि, एंड्रॉयड NDK नमूने उन्हें प्रयोग नहीं करते। मैंने ओरेकल से कुछ दस्तावेज़ पढ़े, लेकिन मैं अभी भी उलझन में हूं।

क्या मुझे एंड्रॉइड एनडीके के साथ काम करते समय उन्हें उपयोग करना होगा?

पूछने के लिए कारणों में से एक - उन मैक्रो को तोड़ने वाक्य रचना CDT :)

उत्तर

10

ग्रहण में प्रकाश डाला मूल रूप से, एक खिड़कियों मुद्दा है यदि आप फ़ाइल jni_md_win32.h कि ओरेकल जावा JDK यह है के साथ आता है के लिए एक नजर है मैक्रो परिभाषा:

/* 
* @(#)jni_md.h 1.14 03/12/19 
* 
* Copyright 2004 Sun Microsystems, Inc. All rights reserved. 
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. 
*/ 

#ifndef _JAVASOFT_JNI_MD_H_ 
#define _JAVASOFT_JNI_MD_H_ 

#define JNIEXPORT __declspec(dllexport) 
#define JNIIMPORT __declspec(dllimport) 
#define JNICALL __stdcall 

typedef long jint; 
typedef __int64 jlong; 
typedef signed char jbyte; 

#endif /* !_JAVASOFT_JNI_MD_H_ */ 

हेडर में jni_md_linux.h वे मैक्रोज़ खाली हैं। तो मुझे लगता है कि जब तक आप अपने देशी कोड को ओरेकल जेवीएम के साथ विंडोज़ में निष्पादित नहीं करना चाहते हैं, तो आप उन मैक्रोज़ को हटा सकते हैं।

+2

और एक लिनक्स मुद्दा: '#define JNIEXPORT __attribute__ ((दृश्यता (" डिफ़ॉल्ट ")))' । निर्यात तालिका के आकार को रखने के लिए इसका शायद '-फदृश्यता = छुपा' के साथ प्रयोग किया जाता है। निर्यात प्रतीक तालिका आकार को कम करने से साझा ऑब्जेक्ट लोड समय और बाइनरी आकार कम हो जाता है। देखें [दृश्यता - जीसीसी विकी] (http://gcc.gnu.org/wiki/ दृश्यता)। – jww

1

जांचें कि एंड्रॉइड एनडीके से इच्छित प्लेटफार्म का पथ शामिल है आपके प्रोजेक्ट के सी \ सी ++ में जोड़ा गया है। यह इस प्रकार किया जा सकता है:

  • ओपन परियोजना गुण
  • C/C++ जनरल विस्तृत
  • पथ और चिह्न क्लिक करें
  • में शामिल अनुभाग पथ जोड़े वांछित मंच के फ़ोल्डर में शामिल करने के लिए NDK की (जैसे $ {ANDROID_NDK_HOME} \ प्लेटफार्मों \ एंड्रॉयड-9 \ कट्टर हाथ \ usr \ शामिल)
संबंधित मुद्दे