我目前正在为 pandaboard 编译 Android Linaro build 11.11 (staging-panda)。
在构建过程中,Android 会使用宿主 gcc 编译器编译一些工具。在我的 Linux Mint 12(基于 Ubuntu-11.10)上,我默认安装了 gcc-4.6。
我构建了 Android,一切运行良好,pandaboard 已启动,但随后启动任何应用程序都会导致分段错误(logcat 中的信号 11)。
然后我了解到 Linaro 使用 gcc-4.5 构建了这个版本,而不是 4.6 版本。我使用 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 位版本。到目前为止,这是我尝试过的事情,但没有成功:
- 按照这些说明重新安装软件包
- 须藤 ldconfig
- 重新启动我的机器
- 我考虑删除 gcc-4.6 以在我的机器上只获得 gcc-4.5。但是突触显示需要卸载太多依赖项,所以我没有做这一步 :)
最后我被告知要安装 gcc-4.5-multilib 和 g++-4.5-multilib。它奏效了,并且构建更进一步。我启动了熊猫,但应用程序(例如 com.android.launcher)仍然无法启动。我知道这是一个假设,但我认为这个段错误与编译器有某种联系。
我的问题很简单:
- com.android.launcher 是交叉编译还是使用主机 32 位编译器编译?我应该寻找什么关键字来在构建日志中找到相关的命令?
- 如何调试此分段错误?特别是,我正在寻找使用“am”命令启动 com.android.launcher。
- strace 会为此问题提供有价值的信息吗?
多谢了。