繁体   English   中英

RaspBerry Pi的交叉编译

[英]Cross-Compiling for RaspBerry Pi

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

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

“非法指导”

如果在二进制文件上创建'文件',我会得到:“raspberry: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;
}

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

你得到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和Raspberry Pi的跨工具链是ARMv6。 但在这种情况下,静态和动态链接都会产生相同的错误。

以下是如何在Windows中构建Raspberry Pi交叉编译器的逐步指南 ,两者都是hardfp / softfp ABI版本。 结果交叉编译器支持C ++,不依赖于cygwin运行时库(cygwin1.dll)。

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

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

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

它是armv6的预制gcc-4.7.3工具链,带有使用gnueabi的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连接,也可以将程序远程部署到raspberry pi中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM