RaspBerry Pi 的交叉编译



使用Raspberry Pi和我的电脑,我正在尝试交叉编译一个简单的用C++编写的helloWorld。我正在使用 Linux 的代码源工具链进行编译。

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

"非法指令"

如果我通过二进制制作一个"文件",我会得到: raspberry: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, stripped

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

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

守则:

#include <iostream>
using namespace std;
int main(void){
    cout << "Hello Cross Compiling for ARM!" << endl << flush;
    return 0;
}

如何以正确的方式编译和运行我的程序?

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

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

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

以下是如何在Windows中构建Raspberry Pi交叉编译器的分步指南,包括hardfp/softfp ABI版本。生成的交叉编译器支持C++并且不依赖于cygwin运行时库(cygwin1.dll)。

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

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

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

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

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

我的建议在这里,http://hertaville.com/2012/09/28/development-environment-raspberry-pi-cross-compiler/他在解释如何使用Eclipse编译HelloWorld.cpp,下载并在Raspberry pi板中执行它方面做得很好。看看吧。

使用Visual

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

相关内容

  • 没有找到相关文章

最新更新