Wie kann man für ARM cross compilieren?

41

Wie richte ich GCC für das Cross-Compilieren für den ARM-Prozessor ein? Der Host wäre auf x86_64 (AMD64 - Ubuntu 12.04) und das Ziel wäre ARM (sowohl Raspberry Pi als auch Pandaboard - werden für jeden separate Kompilierungen durchgeführt)?

haziz
quelle

Antworten:

44

Installieren gcc-arm-linux-gnueabiund binutils-arm-linux-gnueabiPakete, und verwenden Sie dann nur arm-linux-gnueabi-gccstatt gccfür die Kompilierung.

Sie müssen vorsichtig sein, welche Linux- und Binutil-Version Sie auf Ihrem Zielsystem haben. Das neueste Zeug ist hardfloat, in diesem Fall würden Sie tun:

sudo apt-get install gcc-arm-linux-gnueabihf

Dies bringt die komplette Cross-Compile-Umgebung einschließlich Binutils.

Maratyszcza
quelle
Unter Ubuntu 13.10 erhalten Sie gcc-4.7 für 'gnueabi' und gcc-4.8 für 'gnueabihf'.
Nobar
Als ich versuchte zu kompilieren, wurde openssl/ossl_typ.hkein Fehler gefunden, obwohl ich ihn bereits installiert hatte libssl-dev.
Necktwi
1
Wenn Sie Quellcode von bekommen apt-get source, nachdem apt-get build-depSie normalerweise nur mit kompilieren können dpkg-buildpackage -b -uc -us -rGibt es eine Möglichkeit, eine .deb-Datei so einfach für ARM zu erstellen, ohne das Makefile zu ändern?
Jonathan
@Maratyszcza könnten Sie bitte präziser in Bezug auf die Ausführung der Linie sein and then just use arm-linux-gnueabi-gcc instead of gcc for compilation? Wenn ich kompiliere, verwende ich einen Aufruf, auf makeden AFAIK natürlich zeigt /usr/lib/gccoder etwas in der Nähe davon. Wie könnte ich arm-linux-gnueabi-gcc direkt anrufen?
Am
9
@MomergilCC=arm-linux-gnueabihf-gcc make ...
Maratyszcza
1

Der Festplatten-Image-Anbieter muss auch einen kompatiblen Cross-Compiler bereitstellen

Dies ist die einzig zuverlässige Methode.

Insbesondere für RPI stehen die bereitgestellten Cross-Compiler unter https://github.com/raspberrypi/tools zur Verfügung und können wie folgt verwendet werden: https://raspberrypi.stackexchange.com/questions/64273/installing-raspberry- Pi-Cross-Compiler / 83215 # 83215

git clone https://github.com/raspberrypi/tools
export PATH="$(pwd)/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:${PATH}"
printf '#include <stdio.h>\nint main() { puts("hello world"); }\n' > hello_world.c
printf '#include <iostream>\nint main() { std::cout << "hello world" << std::endl; }\n' > hello_world.cpp
arm-linux-gnueabihf-gcc -std=c99 -o hello_world_c hello_world.c
arm-linux-gnueabihf-g++ -std=c++11 -o hello_world_cpp hello_world.cpp

Wenn Sie Ihren eigenen Cross-Compiler falsch auswählen, kann Folgendes passieren:

Meine Lieblingsalternative ist, mit Buildroot ein eigenes Image zu erstellen: https://stackoverflow.com/questions/47557262/how-to-download-the-torvalds-linux-kernel-master-recompile-it-and-boot-it- wi / 49349237 # 49349237 Dies baut alles aus dem Quellcode auf und stellt sicher, dass alles kompatibel ist.

Ciro Santilli ist ein Schauspieler
quelle