存档中的成员../lib/lk/liblk.a(debugfs.o)不是对象,交叉编译perf时出错

存档中的成员../lib/lk/liblk.a(debugfs.o)不是对象,交叉编译perf时出错

当我尝试交叉编译arm的perf工具时,出现以下错误

../lib/lk/liblk.a: member ../lib/lk/liblk.a(debugfs.o) in archive is not an object

我做了什么 ?

cd stable-kernel/tools/perf
make ARCH=arm CROSS_COMPILE=arm-linux-gnu-eabi-gcc

令人惊讶的是,当我真正看到那里时,它是一个成员

ar -t ../lib/lk/liblk.a 
debugfs.o 

这种异常行为的原因可能是什么?

PS:当我编译 x86 时并没有发生这种情况(通常的方式 make 然后 make install)

答案1

您必须将 CC 导出到 ARM 工具链才能将 liblk.a 编译为 ARM elf 格式。

export CC=arm-linux-gnueabihf-gcc

答案2

这是因为 liblk.a 是为 x86 构建的,并且 makescript 搜索为 ARM/所需平台构建的 liblk.a,因此即使当我通过命令文件 liblk.a 查看文件类型时 liblk.a 有一个成员。 a 它清楚地向我表明该文件是为 x86 构建的,因此引发了错误!

所以为了克服这个问题,我首先为 ARM 构建了 liblk.a,然后运行了 makescript 来解决这个问题

相关内容