13

我正在为 ARM-CORTEX-A9 尝试一个简单的交叉编译(cc):为了简单起见,这就是 c 代码:

#include <stdio.h>
int main()
{
   printf("Hello World!\n");
   return 0;
}

手臂上的本机编译工作正常,并开始于gcc helloworld.c -o helloworld而交叉编译开始于arm-xilinx-linux-gnueabi-gcc helloworld.c -o helloworld_cc

海合会版本:

本机:gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) Target: arm-linux-gnueabihf

抄送:gcc version 4.6.3 (Sourcery CodeBench Lite 2012.03-79) Target: arm-xilinx-linux-gnueabi

来自 readelf 的 ABI:

readelf-本地:OS: Linux, ABI: 2.6.31 readelf-cc:OS: Linux, ABI: 2.6.16

链接库- 交叉编译是静态链接的,所以它不应该错过任何库:

root@localhost:/temp# ldd helloworld
        libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6ed8000)
        /lib/ld-linux-armhf.so.3 (0xb6fce000)
root@localhost:/temp# ldd helloworld_cc
        not a dynamic executable

问题:本机程序运行良好,cc 总是以:

root@localhost:/tmp# ./helloworld_cc
-bash: ./helloworld_cc: No such file or directory

任何提示,希望我已经包含了足够的信息。

编辑

静态链接就可以了,但是现在文件的大小很大(678kB(CC-static)vs. 4kB(native)?为什么即使它说它不是动态链接的,它也缺少库?类似的问题:交叉编译使用 arm-linux-gnueabi-gcc 的 Android 的静态 C hello world

arm-xilinx-linux-gnueabi-gcc helloworld.c -o helloworld_cc -static
4

1 回答 1

10

lib文件夹 Linaro Ubuntu中缺少一个链接。它出现了readelf -a

[Requesting program interpreter: /lib/ld-linux.so.3]

把链接lib/ld-linux.so.3放到lib/arm-linux-gnueabihf/ld-2.15.so

它有效。

感谢您的帮助谢尔盖

于 2013-06-05T13:27:15.333 回答