我正在使用Docker容器(thewtex/cross-compiler-linux-armv7
)在x86_64系统上进行ARMv7内嵌式系统(具体来说是带有原始固件的Kobo Aura HD电子阅读器)的简单"Hello World" Linux用户空间C程序交叉编译。
该程序的源代码(hello_world.c
)如下:
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Hello World!\n");
return 0;
}
出乎意料的是,我可以在主机系统上执行生成的可执行文件:
andreas@andreas-pc:~/tmp/test$ uname -a && ./hello
Linux andreas-pc 4.5.5-201.fc23.x86_64 #1 SMP Sat May 21 15:29:49 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Hello World!
以及目标设备上
[root@(none) onboard]# uname -a && ./hello
Linux (none) 2.6.35.3-850-gbc67621+ #1038 PREEMPT Thu Apr 25 15:48:22 CST 2013 armv7l GNU/Linux
Hello World!
这个有解释吗?
为参考,我使用以下一组命令来调用编译器
docker run thewtex/cross-compiler-linux-armv7 > ./dockcross.sh
chmod +x dockcross.sh
由于某种原因生成的shell脚本有缺陷,我需要手动替换 /cross-compiler-base/cross-compiler-linux-armv7/
和 /:build/:build:z/
在 dockcross.sh
中。现在我运行
./dockcross.sh arm-linux-gnueabihf-cc hello_world.c -static -o hello
file
命令返回关于生成的 hello
可执行文件的以下信息
hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=317a9ea164931f614b24e98dec743050e2d7f900, not stripped