2016-10-20 2 views
0

私はarmeabi-v7aのNDK(r11b)を使ってAndroid用のライブラリを構築していますが、異なるバージョンのlibgnustl_shared.soが見つかりました。理由を理解できません。 NDKフォルダでlibgnustl_shared.soはどこから来たのですか?私はビルドした後にサイズが違うのはなぜですか?

  • (アンドロイド - NDK-R11B \源で\ CXX-のSTL \ GNU-のlibstdC++ \ 4.9 \ libsに\ armeabi-v7a \ libgnustl_shared.so)そのサイズが5593koです。
  • ndk-build.cmdを使用してプロジェクト(ライブラリの束)をビルドした後、ライブラリ(libs \ armeabi-v7a \ libgnustl_shared.so)のファイルサイズは694koです。
  • QtCreatorを使用してプロジェクト(ライブラリの束)をビルドした後、ライブラリは(android-build \ libs \ armeabi-v7a \ libgnustl_shared.soの)ファイルサイズは846koです。 apkにパッケージされたライブラリ(android-build \ bin)は同じサイズを持っていることに注意してください。それは(アンドロイド - NDK-R11B /ソース/ CXX-STL/GNU-のlibstdC++/4.9/libsに/ armeabi-v7a/libgnustl_shared.so)からファイルを拾っもそのQtCreatorビルドログレポート注意

メイン質問:コンパイル後のファイルが元のファイルよりも小さいのはなぜですか?リンカ/コンパイラは、ある時点でファイルを縮小しますか(未使用のシンボルを削除しますか?)

ボーナス質問:私は最終的に(846koのlibgnustl_shared.soで終わる)QtCreatorと私のプロジェクトをビルドし、彼自身でそれを統合する他の誰かに私のように、ファイル(しかしlibgnustl_shared.so)を得ました応用。彼がアプリケーションを配備した後、彼のIDE(私が信じるAndroidスタジオ)は694koのlibgnustl_shared.soでそれをデプロイし、私のコードはSTL操作でクラッシュし始めます。これらのクラッシュは、libgnustl_shared.soとの不一致が原因である可能性がありますか?私たちはそれをどのように修正すべきですか? (QtCreatorは私にlibgnustl_shared.soの静的バージョンでビルドさせてはいけません。どのバージョンを展開の最後に使用するのですか?)

私のプロジェクトはQtCreatorでコンパイルされますが、Qtは使用しません私のライブラリをGUIからテストしますが、ライブラリ自体はQtをまったく使用しません)。

答えて

4

コンパイル後のファイルが元のファイルよりも小さいのはなぜですか?リンカ/コンパイラは、ある時点でファイルを縮小しますか(未使用のシンボルを削除しますか?)

はい、共有ライブラリは、ライブラリのアウトディレクトリにインストールされた後に削除されます。 NDK内のライブラリは、ユーザーがデバッグできないようにするため、事前に削除されません。

r11以前では、2つのarmeabi-v7aライブラリがあります。あなたが指定したものと、「サム」サブディレクトリのものがあります。親指の1つだけが実際に使用されました(r12で非親指のものが削除された理由です)。

これらのクラッシュは、libgnustl_shared.soとの不一致が原因である可能性がありますか?

libgnustl_shared.soのバージョンが異なる場合(同じNDKバージョンではない場合)、はい、絶対にあります。両方ともr11から来て、armeabi-v7a(親指か非親指)の両方であれば、それらは互換性があるはずです。いずれかがarmeabi-v7a-hardバージョンのライブラリを使用している場合(r12で削除された場合)、それも間違いなく問題です。armeabi-v7aとarmeabiを混在させることは、あまり確かではありませんが、おそらく問題になる可能性があります。

+0

あなたの助けを頼りにしてください。あなたは、もし彼らが両方ともr11であり、両方ともarmeabi-v7aならば互換性があるはずですが、私たちが694koに剥ぎ取ったものを使用すれば、QtCreatorは846koに剥奪されたものをパッケージ化しました....おそらく694ko私のコードで必要ないくつかのシンボル....いいえ?そうすれば、互換性がなくなります... \ android-ndk-r11b/sources/cxx-stl/gnu-libstdC++/4.9/libs/armeabi-v7a/l ibgnustl_shared.soは取り除かれていません)、すべてのシンボルが存在することを確認しますか? – jpo38

関連する問題