Sto provando a compilare STXXL sotto Android NDK r8b (Ho lo stesso problema con il più recente r8c btw).Compilare STXXL sotto Android NDK r8b
Sto compilando utilizzando gnustl_static.
Ho bisogno C++ 11 supportano quindi inizialmente ho provato modificando
LOCAL_CPPFLAGS := -std=c++11
ma questo vomitato un errore circa uint64_t.
così ho cambiato la bandiera a
LOCAL_CPPFLAGS :=-std=gnu++11
Questo aiuta a un bel po ', ma quando inizia la compilazione ottengo un errore relativo alla STL GNU.
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
Ho anche un intero carico più errori relativi a questo parametro _Arg.
Così guardando la prima funzione è simile al seguente:
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);
}
non posso davvero capire dove il problema sta sorgendo. Gnu ++ 11 non sta definendo __GXX_EXPERIMENTAL_CXX0X__
? O il problema è che non viene usato da qualche parte correttamente? Sono molto confuso su cosa sta causando il problema? Ho compilato STXXL con gnu ++ 11 sotto clang sull'iphone ma suppongo che iPhone stia probabilmente usando un'implementazione STL diversa. Qualcuno ha qualche idea su come posso risolvere questo problema?
Se avete bisogno di ulteriori informazioni basta chiedere!
Edit: Così seguito uno dei commenti qui è la mia application.mk
APP_PLATFORM := android-8
APP_STL := gnustl_static
APP_GNUSTL_FORCE_CPP_FEATURES := exceptions rtti
APP_OPTIM := release APP_ABI := all
e questo è il mio 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)
Edit: È interessante notare che ho appena provato a collocare uno #error temp
all'interno dello #ifdef __GXX_EXPERIMENTAL_CXX0X__
b bloccare la funzione stl_tree.h che ho postato. Il compilatore NON lancia un errore su quella parte ... quindi la definizione non viene mai impostata, che è, presumibilmente, la causa dei miei problemi. Ho anche aggiunto uno specifico -D__GXX_EXPERIMENTAL_CXX0X__
ma questo non fa differenza (è come se non venisse risolto).
Potrebbe essere che la tua versione di g ++ non sappia 'std = C++ 11'Hai provato' -std = C++ 0x'? – juanchopanza
@juanchopanza: Ho provato gnu ++ 0x (come uint64_t non è definito in C++ 0x/11) e ottengo esattamente lo stesso problema. Si compila bene se ho impostato gnu ++ 03 ma poi ho perso il supporto per C++ 11 :( – Goz
hai il 'Android.mk' e' Application.mk' per iniziare? –