現在、pandaboard 用に Android Linaro ビルド 11.11 (staging-panda) をコンパイルしています。
ビルド プロセスでは、Android はホスト gcc コンパイラを使用していくつかのツールをコンパイルします。Linux Mint 12 (Ubuntu-11.10 ベース) では、デフォルトで gcc-4.6 がインストールされています。
私は Android を構築しました。すべて正常に動作し、pandaboard が起動しましたが、アプリケーションを起動すると、セグメンテーション エラーが発生します (logcat のシグナル 11)。
その後、Linaro がこのリリースを 4.6 バージョンではなく gcc-4.5 でビルドしたことを知りました。apt-get でインストールしました。out/ ディレクトリを削除し、Android を完全に再構築しました。
コンパイルは正常に実行されますが、リンカーは私を侮辱します:
g++-4.5 -Wl,-rpath-link=out/target/product/pandaboard/obj/lib -Wl,-rpath,\$ORIGIN/../lib -Lout/host/linux-x86/obj/lib -Wl,--no-undefined -m32 out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o -Wl,--whole-archive -Wl,--no-whole-archive out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/libhost.a -o out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp
g++-4.5 -Wl,-rpath-link=out/target/product/pandaboard/obj/lib -Wl,-rpath,\$ORIGIN/../lib -Lout/host/linux-x86/obj/lib -Wl,--no-undefined -m32 out/host/linux-x86/obj/EXECUTABLES/mkbootfs_intermediates/mkbootfs.o -Wl,--whole-archive -Wl,--no-whole-archive -o out/host/linux-x86/obj/EXECUTABLES/mkbootfs_intermediates/mkbootfs
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.5.4/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.5.4/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.5.4/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.5.4/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
collect2: ld returned 1 exit status
リンカは gcc-4.5 の 64 ビット ライブラリを取得しますが、おそらく 32 ビット バージョン用です。これまでのところ、成功せずに試したことは次のとおりです。
- これらの指示に従ってパッケージのインストールをやり直してください
- sudo ldconfig
- マシンを再起動します
- gcc-4.6 を削除して、マシンで gcc-4.5 のみを取得することを検討しました。しかし、シナプスは非常に多くの依存関係をアンインストールする必要があることを示していたので、その手順を実行しませんでした:)
最後に、gcc-4.5-multilib と g++-4.5-multilib をインストールするように言われました。それは機能し、ビルドはさらに進みました。パンダを起動しても、アプリ (com.android.launcher など) が起動しません。これは仮定であることは承知していますが、この segfault は何らかの形でコンパイラに関連していると思います。
私の質問は簡単です:
- com.android.launcher はホスト 32 ビット コンパイラでクロスコンパイルまたはコンパイルされていますか? ビルド ログで関連するコマンドを見つけるには、どのキーワードを探す必要がありますか?
- このセグメンテーション違反をデバッグするにはどうすればよいですか? 特に、「am」コマンドで com.android.launcher を起動する方法を探しています。
- strace は、この問題に関する有益な情報を提供してくれますか?
ありがとうございます。