我想在Ubuntu 32bit(虚拟盒子)中开始对raspberry pi2进行交叉编译,所以我在github网站(https://github.com/raspberrypi/tools)上下载了工具链,并试图用命令编译一个简单的hello world程序(我已经将包含arm-linux-gnueabihf-gcc-4.8.3的bin文件夹的路径包含在PATH变量中。):
arm-linux-gnueabihf-gcc-4.8.3 HelloWorld.c
但是,我总是收到以下错误消息:
path/to/the/linker/in/the/toolchain/ld:/path/to/the/libc.so.6file/in/the/toolchain/libc.so.6: file format not recognized; treating as linker script
随后出现语法错误。 当我查看libc.so.6时,我看到一行包含:
libc-2.13.so
libc-2.13.so文件与libc.so.6文件位于同一文件夹中。当我调用
时file libc-2.13.so
我明白了:
libc-2.13.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), BuildID[sha1]=dbd0cdca5a677bea1417be1272f4c5ef43bd3e22, for GNU/Linux 2.6.26, stripped
我不知道是什么原因导致这个错误,因为显然工具链中的链接器和工具链中的libc.so.6文件都被处理掉了,所以应该识别文件格式,对吧? 有人能指出我在正确的方向吗?谢谢!
答案 0 :(得分:3)
我会建议您进行交叉编译的替代方法。我尝试了它,它的工作原理。您可以使用crosstool-NG。它为您提供了以图形方式设置工具链以进行交叉编译。设置工具链有很多选项。你可以探索一下。
现在您正在为 ARM-RPi 做准备,但明天如果您的目标CPU发生了变化,那么再次重新配置工具链将非常容易。
您可以在this article中找到简单的步骤。我希望这适合你。
答案 1 :(得分:1)
在我的第一次努力中,我必须在命令中包含gcc的路径。然后我就在RPi上编译了程序。
~/toolchain/raspbian-toolchain-gcc-4.7.2-linux32/bin/arm-linux-gnueabihf-gcc whets.c
答案 2 :(得分:1)
当我查看libc.so.6时,我看到一行包含: libc-2.13.so
我刚碰到这个。 这个问题比你想象的要简单。当您解开并解压缩工具链时,发生的事情是libc.so.6成为文本文件。它应该是指向正确文件“libc-2.13.so”的“符号链接”文件。
如果您使用的是Windows和7-Zip,请确保在启动7-zip时单击“以AS管理员身份运行”。如果只是拖放,错误就不那么明显了。