我目前正在为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安装了它。我删除了/目录并完全重建了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位版本。到目前为止,这是我尝试的事情,但没有成功:
最后我被告知要安装gcc-4.5-multilib和g ++ - 4.5-multilib。它工作,并且构建得更进一步。我启动了熊猫,仍然是应用程序(例如com.android.launcher)无法启动。我知道这是一个假设,但我认为这个段错误与编译器有某种联系。
我的问题很简单:
谢谢你。
答案 0 :(得分:2)
使用 gdb 。要求:
#
是目标shell,但root不是必需的
$
是主机shell
LOCAL_CFLAGS += -g
# gdbserver :5039 </system/bin/executable>
# gdbserver :5039 --attach <pid>
$ adb forward tcp:5039 tcp:5039
$ gdbclient :5039 <executable>
如果您对gdbclient
感到困难,请检查定义该功能的build/envsetup.sh
:
$ type gdbclient
添加详细-v
选项可能是一些帮助。此外,如果您的可执行文件不在system/bin
中,您肯定需要修改build/envsetup.sh
,因为它是硬编码的。
可以找到更多信息here。