【发布时间】:2015-06-05 07:19:34
【问题描述】:
我想在 Ubuntu 32 位(在虚拟机中)上开始交叉编译树莓派 pi2,所以我在 github 站点(https://github.com/raspberrypi/tools)上下载了工具链,并尝试使用命令编译一个简单的 hello world 程序(I'已将包含 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 文件已被处理,因此应该可以识别文件格式,对吧? 有人可以在这里指出我正确的方向吗?谢谢!
【问题讨论】:
-
我认为您缺少链接路径,因此链接器会尝试链接系统的 libc 而不是工具链。尝试添加
-L选项来指定工具链的库。 -
您好,感谢您的评论!我已经在工具链的适当位置(libc/lib 和 include)尝试了 -I 和 -L 标志,但仍然出现相同的错误......但是,由于我将工具链作为 PATH 中的第一个位置,它已经占用了正确的 libc.so 文件(错误信息中还包含 libc 文件的路径)您还有什么建议吗?
-
使用 -v 选项编译以查看正在使用的实际链接器命令。
标签: c gcc raspberry-pi cross-compiling raspberry-pi2