为arm-linux交叉编译ltrace



经过一堆补丁后,我能够运行Makefile,现在它在最后一步崩溃了:下面是我得到的错误:

arm-none-linux-gnueabi-gcc main.o libltrace.a -lelf -o ltrace
arm-none-linux-gnueabi-gcc/bin/ld: cannot find -lelf
collect2: ld returned 1 exit status
make: *** [ltrace] Error 1

我想在Android上运行ltrace。

您不能在自己的系统上使用libelf库。毕竟你是在尝试交叉编译。你的电脑可能是基于x86的,手机是arm的。即使你能说服编译器链接最终的可执行文件,你的x86代码也不会在arm上运行。

你有两个选择:

1)使用交叉编译器编译libelf。

2)尝试从Debian存档中抓取libelf的arm版本,使用dpkg -x将其解压缩到一个私有目录,并尝试链接到该目录。

你可以使用指定库名通过一个完整的路径而不是-l。

尝试:Apt-get install libelf-dev并查看无法找到现有库

考虑Scratchbox。我个人讨厌交叉编译,特别是因为我是一个巨大的Python粉丝,而且很难交叉编译Python,因为它想要运行Python可执行文件(刚刚构建的那个)作为构建过程的一部分。当您在x86桌面上编译ARM版本的Python时,这显然会导致问题。因为Scratchbox使用仿真,它(和您)可以在桌面系统上运行ARM二进制文件(在Scratchbox环境中),这解决了大量交叉编译问题。

ScratchBox用于现在已不存在的Maemo操作系统(运行在ARM上),但人们已经成功地将其用于Android:

  • scratchbox交叉编译android
  • http://www.macrobug.com/blog/2007/11/25/using-scratchbox-to-build-complex-arm-binaries-for-android/

如果你走这条路,请在评论区告诉我。当我为Maemo开发时,我有一个scratchbox虚拟机。我现在正在编写Android软件,所以我对让scratchbox在Android上工作有一些个人兴趣。

最新更新