के तहत STXXL संकलित करना मैं एंड्रॉइड एनडीके आर 8 बी के तहत STXXL संकलित करने की कोशिश कर रहा हूं (मुझे नए आर 8 सी बीटीडब्ल्यू के तहत एक ही समस्या है)।एंड्रॉइड एनडीके आर 8 बी
मैं gnustl_static का उपयोग कर संकलन कर रहा हूं।
मैं तो शुरू में सी ++ 11 समर्थन की जरूरत मैं
LOCAL_CPPFLAGS := -std=c++11
स्थापित करने की कोशिश की लेकिन इस uint64_t के बारे में त्रुटि ऊपर फेंक दिया।
तो मैं
LOCAL_CPPFLAGS :=-std=gnu++11
यह एक निष्पक्ष बिट में मदद करता है लेकिन जब यह संकलन शुरू होता है मैं जीएनयू एसटीएल से संबंधित एक त्रुटि प्राप्त करने के लिए झंडा बदल दिया है।
Users/Gozzeh/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/arm-linux-androideabi-g++ -MMD -MP -MF ./obj/local/armeabi/objs/stxxl/STXXL/algo/copy_and_sort_file.o.d -fpic -ffunction-sections -funwind-tables -fstack-protector -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -march=armv5te -mtune=xscale -msoft-float -fno-exceptions -fno-rtti -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -I/Users/Gozzeh/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include -I/Users/Gozzeh/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include -Ijni -DANDROID -Wa,--noexecstack -fexceptions -frtti -Dnullptr=0 -D_ANDROID -std=gnu++11 -Ijni/STXXL/include -fexceptions -O2 -DNDEBUG -g -I/Users/Gozzeh/android-ndk-r8b/platforms/android-8/arch-arm/usr/include -c jni/STXXL/algo/copy_and_sort_file.cpp -o ./obj/local/armeabi/objs/stxxl/STXXL/algo/copy_and_sort_file.o
In file included from /Users/Gozzeh/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/set:60:0,
from jni/STXXL/include/stxxl/bits/io/simdisk_file.h:33,
from jni/STXXL/include/stxxl/bits/io/io.h:20,
from jni/STXXL/include/stxxl/io:13,
from jni/STXXL/algo/copy_and_sort_file.cpp:18:
/Users/Gozzeh/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/bits/stl_tree.h: In member function 'std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Const_Base_ptr, std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Const_Base_ptr, const _Val&)':
/Users/Gozzeh/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/bits/stl_tree.h:1011:39: error: '_Arg' was not declared in this scope
मुझे इस _Arg पैरामीटर से संबंधित एक संपूर्ण लोड और त्रुटियां भी मिलती हैं।
template<typename _Key, typename _Val, typename _KeyOfValue,
typename _Compare, typename _Alloc>
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _Arg>
#endif
typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
#ifdef __GXX_EXPERIMENTAL_CXX0X__
_M_insert_(_Const_Base_ptr __x, _Const_Base_ptr __p, _Arg&& __v)
#else
_M_insert_(_Const_Base_ptr __x, _Const_Base_ptr __p, const _Val& __v)
#endif
{
bool __insert_left = (__x != 0 || __p == _M_end()
|| _M_impl._M_key_compare(_KeyOfValue()(__v),
_S_key(__p)));
// This line is the error location.
_Link_type __z = _M_create_node(_GLIBCXX_FORWARD(_Arg, __v));
_Rb_tree_insert_and_rebalance(__insert_left, __z,
const_cast<_Base_ptr>(__p),
this->_M_impl._M_header);
++_M_impl._M_node_count;
return iterator(__z);
}
मैं सच में समझ में नहीं आता है, जहां समस्या उत्पन्न होने वाली है:
तो पहले एक समारोह ऐसा दिखाई देता है पर देख रहे हैं। क्या gnu ++ 11 __GXX_EXPERIMENTAL_CXX0X__
को परिभाषित नहीं कर रहा है? या यह समस्या है कि इसका कहीं कहीं उपयोग नहीं किया जा रहा है? मैं समस्या का कारण बनने के लिए बहुत उलझन में हूं? मेरे पास आईफोन पर क्लैंग के तहत gnu ++ 11 के साथ STXXL संकलन है लेकिन मुझे लगता है कि आईफोन शायद एक अलग एसटीएल कार्यान्वयन का उपयोग कर रहा है। क्या किसी को इस समस्या को हल करने के बारे में कोई विचार है?
यदि आपको कोई और जानकारी चाहिए तो बस पूछें!
संपादित करें: टिप्पणी यहाँ से एक के लिए तो आगे मेरी application.mk
APP_PLATFORM := android-8
APP_STL := gnustl_static
APP_GNUSTL_FORCE_CPP_FEATURES := exceptions rtti
APP_OPTIM := release APP_ABI := all
है और यह मेरा android.mk है:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
rwildcard = $(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2))
LOCAL_MODULE := stxxl
LOCAL_CPP_FEATURES += exceptions
FILE_LIST := $(call rwildcard, $(LOCAL_PATH)/STXXL/,*.cpp)
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
LOCAL_CPPFLAGS := -Dnullptr=0 -D_ANDROID -D__STDC_INT64__ -std=gnu++11 -I$(LOCAL_PATH)/STXXL/include
include $(BUILD_SHARED_LIBRARY)
संपादित करें: दिलचस्प बात यह है कि मैंने को #ifdef __GXX_EXPERIMENTAL_CXX0X__
बी के अंदर रखने का प्रयास किया मैंने पोस्ट किया stl_tree.h फ़ंक्शन में लॉक करें। संकलक उस भाग पर कोई त्रुटि नहीं डालता है ... इसलिए परिभाषा कभी भी सेट नहीं हो रही है, संभवतः, मेरे मुद्दों का कारण। मैंने विशेष रूप से -D__GXX_EXPERIMENTAL_CXX0X__
भी जोड़ा है लेकिन इससे कोई फर्क नहीं पड़ता है (जैसे कि यह अपरिचित हो जाता है)।
क्या यह हो सकता है कि g ++ का आपका संस्करण 'std = C++ 11' नहीं जानता है, क्या आपने '-std = C++ 0x' को आजमाया है? – juanchopanza
@juanchopanza: मैंने gnu ++ 0x की कोशिश की है (जैसा कि uint64_t को C++ 0x/11 में परिभाषित नहीं किया गया है) और मुझे बिल्कुल वही समस्या मिलती है। अगर मैं gnu ++ 03 सेट करता हूं तो यह ठीक से संकलित करता है लेकिन फिर मैं C++ 11 समर्थन खो देता हूं :( – Goz
क्या आपको 'एंड्रॉइड.एमके' और' एप्लिकेशन.एमके 'के साथ शुरू करने के लिए मिला है? –