【问题标题】:Cross compiling for Raspberry pi 2 errorRaspberry pi 2 错误的交叉编译
【发布时间】: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


【解决方案1】:

我会建议您使用其他方法进行交叉编译。我试过了,它有效。您可以使用crosstool-NG。它为您提供了图形方式来设置工具链以进行交叉编译。设置工具链有很多选项。你可以探索一下。

现在你正在为 ARM-RPi 做,但明天如果你的目标 CPU 发生变化,那么再次重新配置工具链将非常容易。

您可以在this article 中找到简单的步骤。我希望这对你有用。

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • @Shadwell:我是这个论坛的新手。我编辑了我的答案。你能告诉我,这样好吗?
  • @Shadwell:谢谢!!
  • @Amol 从一开始就使用Buildroot 可能更方便。 BR 已经提供了 RPi2 目标。
  • 感谢大家的建议,最终使用 buildroot 完成!
【解决方案2】:

当我查看 libc.so.6 时,我看到一行包含: libc-2.13.so

我刚碰到这个。 问题比你想象的要简单得多。当您解压缩并解压缩工具链时,libc.so.6 变成了一个文本文件。它应该是指向正确文件“libc-2.13.so”的“符号链接”文件。

如果您使用的是 windows 和 7-Zip,请确保在启动 7-zip 时单击“以管理员身份运行”。如果只是简单的拖拽,错误就不那么明显了。

【讨论】:

    【解决方案3】:

    在我的第一次尝试中,我必须在命令中包含 gcc 的路径。然后我只是在 RPi 上编译了程序。

      ~/toolchain/raspbian-toolchain-gcc-4.7.2-linux32/bin/arm-linux-gnueabihf-gcc whets.c 
    

    【讨论】:

    • 嗨!我尝试在编译时提供绝对路径(我也尝试在 -I 和 -L 标志中使用绝对路径)但仍然:同样的错误......但无论如何感谢您的回答!
    猜你喜欢
    • 2012-06-28
    • 1970-01-01
    • 2023-04-08
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 2020-12-07
    相关资源
    最近更新 更多