2011-04-12 202 views
1

ltrace一堆补丁后,我能够运行的Makefile,现在崩溃,在最后步骤:(以下是错误我得到:交叉编译为ARM-Linux的

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欢迎任何输入

+0

那么链接器找不到libelf,所以首先确保你的系统上实际上有libelf,即运行'locate libelf.so',它应该找到库。发布该命令的输出。如果它位于非默认位置,则链接时可能需要使用lib的完整路径。 – Matt 2011-04-28 19:11:09

+0

@Matt:libelf.so位于/ usr/lib中。如何在链接期间包含路径? – Bruce 2011-04-29 18:56:38

+0

这是我相信的默认位置(对于32位系统),因此您不需要包含路径。你确定它不是libelf.so.1吗?你的makefile是什么样的,你打算怎么样make?具体尝试将CPPFLAGS设置为-I/usr/include/libelf以包含libelf标头。 – Matt 2011-04-29 19:39:35

回答

2

你不能使用了libelf库在自己的系统上你想。交叉编译毕竟你的计算r可能是基于x86的,手机是手臂。即使您可以说服编译器链接最终的可执行文件,您的x86代码也不会随意运行。

你有两个选择:

1)编制了libelf也与交叉编译

2)尝试从Debian存档抓住了libelf ARM版本,使用的dpkg -x解压缩到一个私有目录,并尝试与此相关联。

您可以使用通过完整路径而不是-l指定库名称。

1

尝试:。 的apt-get安装了libelf-dev的 看ld cannot find an existing library

+0

@ Matt @ Ed:Locate不会显示libelf.so.1,而是一个链接libelf.so,目标为libelf.so.1存在在/ usr/lib中 – Bruce 2011-04-30 11:42:14

+0

然后apt-get安装libelf。有些发行公司称它为elfutils或elfutils-libelf。 – 2011-05-01 18:47:38

1

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

ScratchBox中用于现已解散的Maemo操作系统(在ARM上运行),但人们使用它的Android取得了成功:

如果你去这条路线,让我知道在评论部分。当我用于开发Maemo时,我有一个scratchbox虚拟机。我现在正在编写Android软件,因此我有一些个人兴趣可以让scratchbox在android上工作。