2012-01-07 16 views
8

साथ का उपयोग कर मैं इस तरह एक साधारण फ़ाइल stlTest2.cpp है: मुद्दा बिल्ड जब एंड्रॉयड NDK

#include <jni.h> 

#include <cmath> 


bool isnan (void); 

वहाँ कुछ कुछ कोड मैं पोर्टिंग हूँ में अधिक जटिल है। मेरा सवाल यह है। एनडीके के बाहर जीसीसी का उपयोग करते समय यह काम क्यों करेगा, लेकिन एनडीके का उपयोग करने के साथ नहीं? वहाँ त्रुटि यह देता है यह है:

jni/stlTest2.cpp:6: error: expected unqualified-id before 'sizeof' 
jni/stlTest2.cpp:6: error: expected ')' before 'sizeof' 

इस के लिए तत्काल कारण यह है कि math.h (<cmath> के माध्यम से शामिल है) मैक्रो के रूप में परिभाषित करता है isnan है। से #define सहित एनएनके के बाहर का निर्माण क्यों नहीं है, लेकिन यह है? अगर मैं कोड में शामिल टिप्पणी करता हूं, तो सब ठीक है, लेकिन यह स्वीकार्य नहीं है क्योंकि यह समस्या खुद को दोहराती है .... बहुत कुछ।

+0

आप एक असंगत प्रकार के साथ 'इस्नान' क्यों घोषित करते हैं? –

उत्तर

2

$ NDK \ स्रोतों में \ CXX-एसटीएल \ gnu-libstdC++ \ libs \ armeabi \ \ बिट्स शामिल \ C++ config.h (जो भी उचित है के लिए परिवर्तन armeabi) यह परिवर्तन:

/* #undef _GLIBCXX_USE_C99_MATH */ 

#define _GLIBCXX_USE_C99_MATH 1 

फिर अपनी परियोजना को साफ और बनाएं।

4

isnan मैक्रो सी 99 में जोड़ा गया था। C++ में 11 यह शायद उपयोग कर रहा है, जैसे कि आपकी गैर NDK जीसीसी के रूप में std नाम स्थान में एक समारोह के रूप में जोड़ा गया है, float और double और long double (ताकि एक ठेठ <cmath> हैडर, के लिए अतिभारित, कुछ इस तरह हो सकता है:

#undef isnan 

inline bool isnan(float ...) { ... } 

inline bool isnan(double ...) { ... } 

inline bool isnan(long double ...) { ... } 

), लेकिन स्पष्ट रूप से एनडीके को ज्ञापन नहीं मिला है, और अभी भी सुविधा के रूप में सी 99 मैक्रो प्रदान कर रहा है। (isnan सी ++ में एक मैक्रो कभी नहीं था, लेकिन इससे पहले कि TR1 std::tr1::isnan कहा, वहाँ नहीं वास्तव में एक सी ++ विकल्प है, तो कई सी ++ compilers C99 मैक्रो प्रदान किया गया।)

आप उपयोग करना संकलक के द्वारा उपलब्ध कराया सक्षम होने के लिए की जरूरत है isnan या std::isnan? यदि नहीं, तो आप सिर्फ इस बदल सकते हैं:

#include <cmath> 
इस के लिए

:

#include <cmath> 

#undef isnan 

(और इसी तरह किसी अन्य समस्याग्रस्त मैक्रो के लिए, आप उन्हें जरूरत नहीं है प्रदान की गई)।

+0

मैं ऐसा कर सकता हूं और इसे करना शुरू कर दिया, लेकिन कोड इस तरह से भरा हुआ है। मैं सोच रहा था कि एंड्रॉइड को एक अलग, अधिक अद्यतित cmath का उपयोग करने का कोई तरीका था या नहीं। यदि नहीं, तो मैं आपका जवाब स्वीकार करूंगा। मैंने इसे पहले से ही वोट दिया है। धन्यवाद। बहुत सारे math.h मैक्रोज़ के साथ एक ही मुद्दा बीटीडब्ल्यू, लेकिन एक ही समाधान काम करना चाहिए। – corbin

+0

इसे आजमाएं: http://www.crystax.net/en/android/ndk/7 – corbin

+0

इसे ठीक करने का तरीका मिला। मेरा जवाब देखें – corbin

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