当我尝试交叉编译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 来解决这个问题