2013-02-19 63 views
1

我正在使用通過使用QT(必需)開發的靜態庫。有些問題阻礙了我的工作,所以我寫信要求你提供一些建議。我遇到的奇怪問題是靜態庫,libQtCore.so與我的Android本機 共享庫(使用ndk-r8b編譯)成功鏈接,但在libQtCore.so上崩潰。 跟蹤表明libQtCore.so在某些STL操作中崩潰。Android本機使用Qt庫

我注意到必需品有它自己的ndk,所以我應該編譯所有我的android 本地庫通過使用必要的ndk?必需品和android libC++/libstdC++的libC++/libstdC++是ABI兼容的嗎?

這裏是故障追蹤。非常感謝你。

signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000`enter code here`0000 

/data/app-lib/com.balabala-1/libQtCore.so (std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)+468) 
/data/app-lib/com.balabala-1/libQtCore.so (std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)+28) 
02-18 10:53:50.779: I/DEBUG(159): stack: 
02-18 10:53:50.779: I/DEBUG(159):   780664d0 7806656c [stack:24549] 
02-18 10:53:50.779: I/DEBUG(159):   780664d4 78066510 [stack:24549] 
02-18 10:53:50.779: I/DEBUG(159):   780664d8 78066510 [stack:24549] 
02-18 10:53:50.779: I/DEBUG(159):   780664dc 7806656c [stack:24549] 
02-18 10:53:50.779: I/DEBUG(159):   780664e0 72e37488 
02-18 10:53:50.779: I/DEBUG(159):   780664e4 761fcbcb /data/app-lib/com.balabala-1/libmsess.so 
02-18 10:53:50.779: I/DEBUG(159):   780664e8 c0000000 
02-18 10:53:50.779: I/DEBUG(159):   780664ec 0000004c 
02-18 10:53:50.779: I/DEBUG(159):   780664f0 0000004c 
02-18 10:53:50.779: I/DEBUG(159):   780664f4 00000000 
02-18 10:53:50.779: I/DEBUG(159):   780664f8 72e37480 
02-18 10:53:50.779: I/DEBUG(159):   780664fc 4021a3c3 /system/lib/libc.so (dlmalloc+5170) 
02-18 10:53:50.779: I/DEBUG(159):   78066500 76317d28 
02-18 10:53:50.779: I/DEBUG(159):   78066504 762d2b0c /data/app-lib/com.balabala-1/libmsess.so 
02-18 10:53:50.779: I/DEBUG(159):   78066508 df0027ad 
02-18 10:53:50.779: I/DEBUG(159):   7806650c 00000000 
02-18 10:53:50.779: I/DEBUG(159):  #00 78066510 00000001 
02-18 10:53:50.779: I/DEBUG(159):   ........ ........ 
02-18 10:53:50.779: I/DEBUG(159):  #01 78066510 00000001 
02-18 10:53:50.779: I/DEBUG(159):   78066514 76317d28 
02-18 10:53:50.779: I/DEBUG(159):   78066518 78066594 [stack:24549] 
02-18 10:53:50.779: I/DEBUG(159):   7806651c 76317d28 
02-18 10:53:50.779: I/DEBUG(159):   78066520 762d2b0c /data/app-lib/com.balabala-1/libmsess.so 
02-18 10:53:50.779: I/DEBUG(159):   78066524 725e2fc8 
02-18 10:53:50.779: I/DEBUG(159):   78066528 78066594 [stack:24549] 
02-18 10:53:50.779: I/DEBUG(159):   7806652c 72e37488 
02-18 10:53:50.779: I/DEBUG(159):   78066530 00100000 
02-18 10:53:50.779: I/DEBUG(159):   78066534 72e37488 
02-18 10:53:50.779: I/DEBUG(159):   78066538 00000000 
02-18 10:53:50.779: I/DEBUG(159):   7806653c 75c7c4e0 /data/app-lib/com.balabala-1/libQtCore.so (std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)+40) 
02-18 10:53:50.779: I/DEBUG(159):   78066540 00000001 
02-18 10:53:50.779: I/DEBUG(159):   78066544 78066594 [stack:24549] 
02-18 10:53:50.779: I/DEBUG(159):   78066548 725e2fc8 
02-18 10:53:50.779: I/DEBUG(159):   7806654c 762026d5 /data/app-lib/com.balabala-1/libmsess.so 

回答

1

缺省情況下,最小的C++運行時系統庫(/system/lib/libstdc++.so)的頭文件和庫構建C++源時被使用。

APP_STL:

但是,您可以通過可變APP_STL設置到別的你Application.mk東西,比如選擇不同的執行= stlport_static

要選擇具備這個NDK靜態STLport實現。值APP_STL值如下:

system - >使用默認的最小C++運行時庫。 stlport_static - >使用構建爲靜態庫的STLport。 stlport_shared - >使用構建爲共享庫的STLport。 gnustl_static - >使用GNU libstdC++作爲靜態庫。

您正在使用哪個NDK?您是否嘗試過編譯使用STL的示例應用程序之一,例如test-libstdC++?

+0

謝謝你的建議。我使用的ndk是r8d。本機已使用由Google ndk提供的Stlport_static。 – user2031207 2013-02-20 03:12:36