交叉编译 Raspberry pi 2 错误
Cross compiling for Raspberry pi 2 error
我想开始在 Ubuntu 32 位(在虚拟框中)上对树莓派 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 文件都经过处理,所以应该可以识别文件格式,对吗?
有人可以在这里指出我正确的方向吗?谢谢!
我会建议您使用其他方法进行交叉编译。我试过了,它有效。您可以使用 crosstool-NG。它为您提供图形方式来设置交叉编译的工具链。设置工具链有很多选项。你可以探索一下。
现在您正在为 ARM-RPi 做,但明天如果您的目标 CPU 发生变化,那么重新配置工具链将非常容易。
您可以在 this article 中找到简单的步骤。我希望这对你有用。
在我的第一次努力中,我必须在命令中包含 gcc 的路径。然后我就在树莓派上编译了程序。
~/toolchain/raspbian-toolchain-gcc-4.7.2-linux32/bin/arm-linux-gnueabihf-gcc whets.c
When I look into libc.so.6, I see a single line containing:
libc-2.13.so
我只是 运行 喜欢这个。
问题比你想象的要简单得多。当您 un-gz 解压工具链时,libc.so.6 变成了一个文本文件。它应该是指向正确文件 "libc-2.13.so".
的 "symbolic link" 文件
如果您正在使用 windows 和 7-Zip,请确保在启动 7-zip 时单击 "Run AS Administrator"。如果只是简单地拖放,错误就没有那么明显了。
我想开始在 Ubuntu 32 位(在虚拟框中)上对树莓派 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 文件都经过处理,所以应该可以识别文件格式,对吗? 有人可以在这里指出我正确的方向吗?谢谢!
我会建议您使用其他方法进行交叉编译。我试过了,它有效。您可以使用 crosstool-NG。它为您提供图形方式来设置交叉编译的工具链。设置工具链有很多选项。你可以探索一下。
现在您正在为 ARM-RPi 做,但明天如果您的目标 CPU 发生变化,那么重新配置工具链将非常容易。
您可以在 this article 中找到简单的步骤。我希望这对你有用。
在我的第一次努力中,我必须在命令中包含 gcc 的路径。然后我就在树莓派上编译了程序。
~/toolchain/raspbian-toolchain-gcc-4.7.2-linux32/bin/arm-linux-gnueabihf-gcc whets.c
When I look into libc.so.6, I see a single line containing: libc-2.13.so
我只是 运行 喜欢这个。 问题比你想象的要简单得多。当您 un-gz 解压工具链时,libc.so.6 变成了一个文本文件。它应该是指向正确文件 "libc-2.13.so".
的 "symbolic link" 文件如果您正在使用 windows 和 7-Zip,请确保在启动 7-zip 时单击 "Run AS Administrator"。如果只是简单地拖放,错误就没有那么明显了。