Cross-Compiling für den RaspBerry Pi
Mit einem RaspBerry Pi und auf meinem computer, ich bin versucht zu cross-kompilieren eine einfache helloWorld in C++ geschrieben. Ich bin mit Code Sourcery toolchain für linux zu kompilieren.
Beim kopieren der helloWorld-binary raspBerry per TFTP und geben Sie die Ausführung von Berechtigungen mit chmod, wird die nächste Fehlermeldung angezeigt:
"Illegal instruction"
Wenn eine "Datei" über binären ich bekommen:
"Himbeere: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statisch linked, stripped"
Dies ist, weil ich früher "-static-static-libstdc++" als Verlinkung.
Wenn ich nicht verwenden statische Links, der Fehler ist:
"Segmentation fault"
Code:
/*
* 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;
}
Wie konnte ich kompilieren und ausführen, mein Programm in einen richtigen Weg?
Danke.
Ich dachte, einer der Vorteile der RaspberryPi ist, dass es wird eine vollständige OS, die Sie nicht brauchen, um cross-kompilieren.
Ja, aber das kompilieren auf einem Raspberry ist langsamer als das kompilieren in meinen Core i5. Aber auch ich will das Programm mit meinen geliebten Eclipse.
wenn bauen die ganze toolchain, die auf dem Zielsystem ist eine Anforderung, Was ist der Sinn von download/kaufen Sie eine kommerzielle toolchain?
Ich weiß, dass es so viel später, aber ich kann mir nicht helfen!
endl
bereits flush
es, so dass Sie bewusst flush zweimal. Dies ist der Grund, warum ich lieber mit '\n'
zu endl
in den ersten Platz.InformationsquelleAutor Cesar Ortiz | 2012-06-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Grund, warum sind Sie immer
Segmentation fault
Fehler ist anders, ABI. Raspberry Pi beim ausführen von Raspbian ist mitlinux-arm-gnueabihf
ABI, die davon ausgeht hardfp-und VFP-Unterstützung in der hardware (das ist selten in ARMv6-Umgebung), dies erfordert einige zusätzliche patches für den GCC und EGLIBC (diese patches finden Sie im Raspbian-repository).Ihren Code Sourcery cross-toolchain die meisten wahrscheinlich nicht haben, diese Flecken, so dass es mit einem anderen ABI (
linux-arm-gnueabi
) daher der Absturz zur Laufzeit (statische Verbindung funktioniert, da das kernel-ABI hängt nicht davon ab, hardfp/softfp).Ein weiterer möglicher Grund, warum Sie immer
Illegal Instruction
Fehler-Code Sourcery cross-toolchain konfiguriert für ARMv7 und Raspberry Pi ARMv6. Aber in diesem Fall sowohl die statische als auch die dynamische Verknüpfung wird der Ertrag der gleiche Fehler.Hier ist eine Schritt-für-Schritt-Anleitung, wie zu bauen, Raspberry Pi-cross-compiler in Windows, beide hardfp/softfp ABI-Versionen. Daraus resultierende cross-compiler unterstützt C++ und hängt nicht von der cygwin-runtime-library (cygwin1.dll).
InformationsquelleAutor Mikhail Kupchik
Ich würde empfehlen, versucht biicode, es stellt automatisch die cross-compiler-Umgebung für Sie und sendet die erzeugten binaries auf den raspberry nach dem Bau
behoben, vielen Dank für das erzählen
InformationsquelleAutor hithwen
Das problem war der Einsatz von ASCII-Modus anstelle von Binär-Modus in meinem FTP-übertragungen.
Heute bevorzuge ich die Verwendung von SFTP (SSH).
Danke.
InformationsquelleAutor Cesar Ortiz
Könnten Sie versuchen, die toolchain unter: https://github.com/kallaballa/Raspberry-GCC-4.7.3
Es ist ein pre-built-gcc-4.7.3 toolchain für armv6 mit hardfp mit gnueabi. Ich verwende es, um cross-kompilieren von c++11 für eine raspberrian Ziel.
Bitte beachten, es funktioniert nur auf linux-x86_64 hosts.
InformationsquelleAutor kallaballa
Meine Empfehlung ist hier, http://hertaville.com/2012/09/28/development-environment-raspberry-pi-cross-compiler/
Er macht einen guten job zu erklären, wie man mit Eclipse kompilieren HelloWorld.cpp, download, und führen Sie Sie in der Raspberry pi-board. Überprüfen Sie es heraus.
InformationsquelleAutor Hatto
Mithilfe von Visual studio und Visual GDB-plugin, Sie können download-cross-compiler für den raspberry pi. Danach können Sie erstellen eine ssh-Verbindung und stellen Sie Ihr Programm aus der Ferne in raspberry pi.
InformationsquelleAutor Arun Chand