2012-09-25 34 views
1

我的代碼崩潰的位置:崩潰NDK

void setText(const string & s) 
{ 
    needsReload = true; 
    _text = s; //<-- SIGSEGV here 
} 

_text是爲std :: string

這使得完全沒有意義。 this,_texts處於有效存儲器中。我無法嘗試portstl,因爲我需要例外。沒有什麼可以出錯的。我目前正在編譯armeabi-v7a。 有什麼建議嗎?

經過一番搗鼓之後,我發現每當我給事先給空串的字符串賦值時,它就會崩潰。我認爲這與我的libstdC++有關。這裏是我的編譯和鏈接標誌:

[ 50%] Building CXX object CMakeFiles/Mathrix.dir/main.cpp.o 
/opt/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-g++ -DMathrix_EXPORTS -DANDROID -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ --sysroot=/opt/android-ndk/platforms/android-9/arch-arm -fsigned-char -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -fdata-sections -ffunction-sections -fPIC -Wno-psabi -frtti -fexceptions -marm -Os -finline-limit=64 -fno-strict-aliasing -fno-omit-frame-pointer -DDEBUG -D_DEBUG -DDEBUG -fPIC -isystem /opt/android-ndk/platforms/android-9/arch-arm/usr/include -isystem /opt/android-ndk/sources/cxx-stl/gnu-libstdc++/4.6/include -isystem /opt/android-ndk/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include -I/home/da_petcu21/src/Porkholt/Examples/Mathrix/../../Engine/include -I/home/da_petcu21/src/Porkholt/Examples/Mathrix/../../Engine/../Externals/lua/src -I/home/da_petcu21/src/Porkholt/Examples/Mathrix/../../Engine/../Externals/libpng -I/home/da_petcu21/src/Porkholt/Examples/Mathrix/../../Engine/../Externals/zlib -I/home/da_petcu21/src/Porkholt/Examples/Mathrix/../../Engine/../Externals/uremote/include -I/home/da_petcu21/src/Porkholt/Examples/Mathrix/../../Engine/../Externals/openal-soft/include -o CMakeFiles/Mathrix.dir/main.cpp.o -c /home/da_petcu21/src/Porkholt/Examples/Mathrix/main.cpp 
Linking CXX shared library ../libs/armeabi-v7a/libMathrix.so 
/usr/bin/cmake -E cmake_link_script CMakeFiles/Mathrix.dir/link.txt --verbose=Yes 
/opt/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-g++ -fPIC --sysroot=/opt/android-ndk/platforms/android-9/arch-arm -fsigned-char -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -fdata-sections -ffunction-sections -fPIC -Wno-psabi -frtti -fexceptions -marm -Os -finline-limit=64 -fno-strict-aliasing -fno-omit-frame-pointer -DDEBUG -D_DEBUG -DDEBUG -Wl,--fix-cortex-a8 -Wl,--gc-sections -Wl,--no-undefined -shared -Wl,-soname,libMathrix.so -o ../libs/armeabi-v7a/libMathrix.so CMakeFiles/Mathrix.dir/main.cpp.o -L/opt/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/user/libs/armeabi-v7a -L/home/da_petcu21/src/Porkholt/Examples/Mathrix/build-android/armeabi-v7a/CMakeFiles/ndklibs/armeabi-v7a -L/home/da_petcu21/src/Porkholt/Examples/Mathrix/build-android/libs/armeabi-v7a -lPorkholt -llua -Wl,-rpath,/opt/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/user/libs/armeabi-v7a:/home/da_petcu21/src/Porkholt/Examples/Mathrix/build-android/armeabi-v7a/CMakeFiles/ndklibs/armeabi-v7a:/home/da_petcu21/src/Porkholt/Examples/Mathrix/build-android/libs/armeabi-v7a 

我使用拷貝構建腳本libgnustl_static/home/da_petcu21/src/Porkholt/Examples/Mathrix/build-android/armeabi-v7a/CMakeFiles/ndklibs/armeabi-v7a/libstdc++.a

我懷疑它採用了一個在/opt/android-ndk/platforms/android-9/arm/lib代替

+0

沒有足夠的上下文。代碼看起來很無辜。使用您發佈的少量信息無法找到該錯誤。 –

+0

幾乎有_something_這是錯誤的 - 因爲它是。我同意塞瓦的觀點。請發佈一個獨立的示例。 –

回答

3

的問題是,STL被掛靜態地與我的每個庫相關聯,從而創建它需要共享的某些全局變量的副本。 (查看Can't load native shared library with dependencies in a native activity app瞭解我的apk庫的版面)。

以供將來參考,這裏是爲什麼發生這種情況相當不錯解釋:http://www.trilithium.com/johan/2005/06/static-libstdc/

我設法通過簡單的動態鏈接STL來解決這個問題。

+0

必須明確選擇'stl = C++ _ shared'gnustl和stlport不適合我 –