【问题标题】:Cross-Compiling for RaspBerry PiRaspBerry Pi 的交叉编译
【发布时间】:2012-06-28 04:44:39
【问题描述】:

使用 RaspBerry Pi 和我的计算机,我正在尝试交叉编译一个用 C++ 编写的简单 helloWorld。我正在使用 Code Sourcery 工具链 for linux 进行编译。

当通过 TFTP 将 helloWorld 二进制文件复制到 raspBerry 并使用 chmod 赋予它执行权限时,出现下一个错误:

“非法指令”

如果在二进制文件上创建一个“文件”,我会得到: “覆盆子:ELF 32 位 LSB 可执行文件,ARM,版本 1 (SYSV),静态链接,剥离”

这是因为我在链接时使用了“-static -static-libstdc++”。

如果我不使用静态链接,错误是: “分段错误”

代码:

/*
 * main.cpp
 *
 *  Created on: 26/06/2012
 *      Author: ccortiz
 */

#include <iostream>
using namespace std;

int main(void){

    cout << "Hello Cross Compilling for ARM!" << endl << flush;
    return 0;
}

我怎样才能以正确的方式编译和运行我的程序? 谢谢。

【问题讨论】:

  • 如果您的二进制文件,请发布 hello world 源代码和反汇编代码。
  • 是的,但是在 Raspberry 上编译比在我的 Core i5 上编译要慢。但我也想用我心爱的 Eclipse 编程。
  • 如果需要在目标系统上构建整个工具链,下载/购买商业工具链是什么意思?
  • 我得到“分段错误”,因为通过 TFTP 将我的二进制文件传输到树莓派,我使用 ASCII 模式而不是二进制模式。初学者的东西。
  • @CesarOrtiz 我知道这已经很晚了,但我就是忍不住! endl已经flushes,所以你故意冲洗两次。这就是为什么我首先更喜欢使用'\n' 而不是endl

标签: c++ cross-compiling codesourcery raspberry-pi


【解决方案1】:

您收到 Segmentation fault 错误的原因是不同的 ABI。 Raspberry Pi 在运行 Raspbian 时使用 linux-arm-gnueabihf ABI,它假定硬件支持 hardfp 和 VFP(这在 ARMv6 环境中很少见),因此需要一些额外的 GCC 和 EGLIBC 补丁(这些补丁可以在 Raspbian 存储库中找到)。

您的 Code Sourcery 跨工具链很可能没有这些补丁,因此它使用了另一个 ABI (linux-arm-gnueabi),因此在运行时崩溃(静态链接有效,因为内核 ABI 不依赖于 hardfp/softfp)。

您可能会收到Illegal Instruction 错误的另一个可能原因是为 ARMv7 配置的 Code Sourcery 跨工具链,而 Raspberry Pi 是 ARMv6。但在这种情况下,静态链接和动态链接都会产生相同的错误。

Here is a step-by-step guide how to build Raspberry Pi cross compiler in Windows,两个 hardfp/softfp ABI 版本。生成的交叉编译器支持 C++,不依赖 cygwin 运行时库(cygwin1.dll)。

【讨论】:

    【解决方案2】:

    问题是在我的 FTP 传输中使用 ASCII 模式而不是二进制模式。 今天我更喜欢使用 SFTP (SSH)。 谢谢。

    【讨论】:

      【解决方案3】:

      您可以在以下位置尝试工具链:https://github.com/kallaballa/Raspberry-GCC-4.7.3

      这是一个预构建的 gcc-4.7.3 工具链,用于 armv6 和使用 gnueabi 的 hardfp。我正在使用它为树莓派目标交叉编译 c++11。

      请注意,它仅适用于 linux x86_64 主机。

      【讨论】:

        【解决方案4】:

        我的推荐在这里,http://hertaville.com/2012/09/28/development-environment-raspberry-pi-cross-compiler/ 他很好地解释了如何使用 Eclipse 编译 HelloWorld.cpp,下载并在树莓派板中执行。看看吧。

        【讨论】:

          【解决方案5】:

          使用 Visual Studio 和 Visual GDB 插件,您可以下载树莓派的交叉编译器。之后,您可以创建一个 ssh 连接,也可以将您的程序远程部署到树莓派中。

          【讨论】:

            【解决方案6】:

            我建议尝试biicode,它会自动为您设置交叉编译器环境,并在构建后将生成的二进制文件发送到树莓派

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-11-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-04-08
              • 2019-11-23
              相关资源
              最近更新 更多