2016-12-22 11 views
0

私はQtの5を使用してAPKを構築するためにadd_qt_android_apkを使用します。QTAV_LIBRARIESが前に定義されてadd_qt_android_apkストリップ共有ライブラリのデバッグシンボル

add_qt_android_apk(my_app_apk gustavsfairyland NAME "@string/ApplicationName" 
     DEPENDS 
     ${QTAV_LIBRARIES} 
    ) 

set(QTAV_LIBRARIES 
     "${QTAV_FFMPEG_LIB_DIR}/libavcodec.so" 
     "${QTAV_FFMPEG_LIB_DIR}/libavfilter.so" 
     "${QTAV_FFMPEG_LIB_DIR}/libavformat.so" 
     "${QTAV_FFMPEG_LIB_DIR}/libavresample.so" 
     "${QTAV_FFMPEG_LIB_DIR}/libavutil.so" 
     "${QTAV_FFMPEG_LIB_DIR}/libswresample.so" 
     "${QTAV_FFMPEG_LIB_DIR}/libswscale.so" 
     "${CMAKE_BINARY_DIR}/buildqtav/${QTAV_LIB_DIR}/libQtAV.so" 
     "${CMAKE_BINARY_DIR}/buildqtav/${QTAV_LIB_DIR}/libQtAVWidgets.so" 
    ) 

私は(デバッグモードを使用してlibQtAV.soを構築user.conf):

nmを使用してシンボルを確認すると、多くの記号が表示されます。

nm ../buildqtav/lib_android_arm/libQtAV.so 
00062884 t $a 
00061d88 t $a 
0005f9d0 t $a 
... 

しかし、私はlibsディレクトリにコピーされたライブラリにNMを使用するとき、私は何を取得:

bash-4.3$ nm armeabi-v7a/libQtAV.so 
nm: armeabi-v7a/libQtAV.so: no symbols 

はデバッグシンボルを削除add_qt_android_apkていますか?

if(EXTRA_LIBS) 
     set(EXTRA_LIBS "${EXTRA_LIBS},${LIB}") 
    else() 
     set(EXTRA_LIBS "${LIB}") 
    endif() 
    endforeach() 
    set(QT_ANDROID_APP_EXTRA_LIBS "\"android-extra-libs\": \"${EXTRA_LIBS}\",") 

ので、それは指定された外部.soのパスを使用しています。

はQtのAPKのためのcmakeのモジュールでは、私はこれが見つかりました。それはCMake変数QT_ANDROID_APP_EXTRA_LIBSのqtdeploy.jsonに追加されます。どのエントリ「アンドロイド補足LIBS」で

buildandroidarmeabi-v7a/buildqtav/lib_android_arm/libQtAV.so 

ありますので、それは実際に正しいエントリを持っていますが、何とかデバッグシンボルを取り除き を。 "libs"フォルダ内のライブラリは1.1MBのサイズを持ち、 "lib_android_arm"内の元のライブラリは1.6MBのサイズです。

私は、現時点で印刷しNDK-スタックを使用してルーチンを見てみたいと思います:

Stack frame #05 pc 000b714f /data/app/org.qtproject.gustavsfairyland-1/lib/arm/libQtAV.so: Routine ?? 

編集: 私は、次のCMakeのモジュールを使用します。https://github.com/LaurentGomila/qt-android-cmake

EDIT2: それがどのように見えますandroiddeployqtは常にライブラリのシンボルを削除します。 http://code.qt.io/cgit/qt/qttools.git/tree/src/androiddeployqt/main.cpp

stripLibraries()は、アプリケーションをビルドするときに常に呼び出されます。

答えて

0

まあ、androiddeployqtは、ライブラリのサイズを縮小するために常にライブラリを取り除いています。私はQtのバグレポートを開きました:https://bugreports.qt.io/browse/QTBUG-57771

0

すでに編集された質問とその答えで述べたように、androiddeployqtは.soファイルからdebuginfoを取り除くものです。

ここで重要なのは、androiddeployqtはファイルを変更せず、apkを生成するプロセスでコピーを作成し、このコピーだけがデバッグ情報を取り除いたことです。ビルド出力には、デバッグ情報を含む未修正の.soファイルがあり、アプリケーションのデバッグに使用できます(Qt作成者はそのAFAIKを実行します)。これはシンボル情報を取得するために使用できます。これを使用して読み取り可能なスタックトレースを作成しますブレークパッドのクラッシュダンプファイル。

QTBUG-57771が不完全なものとして拒否された理由もあると思います。Qtの作成者が現在のビルドプロセスで動作する限り、Qtの管理者はシンボルをデバイスで利用できる十分な理由はありません適切に設定されたツールチェーンでデバッグが可能であることを示しています)。

関連する問題