簡體   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