1

QT(necessitas)を使用して開発された静的ライブラリを使用しています。いくつかの問題が私の仕事を妨げているので、あなたからのアドバイスを求めるために書いています。私が遭遇した奇妙な問題は、静的ライブラリであり、libQtCore.so は Android ネイティブ共有ライブラリ (ndk-r8b を使用してコンパイル) と正常にリンクされていますが、libQtCore.so でクラッシュします。トレースは、一部の STL 操作で libQtCore.so がクラッシュすることを示しています。

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) のヘッダーとライブラリが使用されます。

ただし、Application.mk で変数 APP_STL を別の値に設定することで、別の実装を選択できます。たとえば、次のようになります。

APP_STL := stlport_static

この NDK で提供される静的 STLport 実装を選択するには。値 APP_STL の値は次のとおりです。

system -> デフォルトの最小限の C++ ランタイム ライブラリを使用します。stlport_static -> スタティック ライブラリとしてビルドされた STLport を使用します。stlport_shared -> 共有ライブラリとしてビルドされた STLport を使用します。gnustl_static -> GNU libstdc++ をスタティック ライブラリとして使用します。

どの NDK を使用していますか? test-libstdc++ などの STL を利用するサンプル アプリケーションの 1 つをコンパイルしてみましたか?

于 2013-02-19T14:09:50.237 に答える