1

我正在使用一个使用 QT(necessitas) 开发的静态库。有些问题阻碍了我的工作,所以我写信征求你的意见。我遇到的奇怪问题是静态库和 libQtCore.so 与我的 Android 本机共享库(使用 ndk-r8b 编译)成功链接,但在 libQtCore.so 崩溃。跟踪表明 libQtCore.so 在某些 STL 操作中崩溃。

我注意到 necessitas 有自己的 ndk,所以我应该使用 necessitas 的 ndk 编译我所有的 android 原生库吗?necessitas 的 libc++/libstdc++ 和 android 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
4

1 回答 1

1

默认情况下,构建 C++ 源代码时使用最小 C++ 运行时系统库 (/system/lib/libstdc++.so) 的头文件和库。

但是,您可以通过将变量 APP_STL 设置为 Application.mk 中的其他内容来选择不同的实现,例如:

APP_STL := stlport_static

选择此 NDK 提供的静态 STLport 实现。值 APP_STL 值如下:

system -> 使用默认的最小 C++ 运行时库。stlport_static -> 使用作为静态库构建的 STLport。stlport_shared -> 使用作为共享库构建的 STLport。gnustl_static -> 使用 GNU libstdc++ 作为静态库。

您使用的是哪个 NDK?您是否尝试过编译使用 STL 的示例应用程序之一,例如 test-libstdc++?

于 2013-02-19T14:09:50.237 回答