Während ich gerade an meinem Laptop (amd64) arbeite, kann ich bereits Code über SSH auf einem BeagleBone (armhf) kompilieren.
Was ich jetzt versuche, ist, jede beliebige IDE zum Debuggen dieses Codes verwenden zu können (Code::Blocks, KDevelop oder Qt Creator).
Ich dachte also daran, es gdbserver
auf BeagleBone laufen zu lassen und mich damit zu verbinden, aber es gibt mir bei der Antwort einen Fehler mit unerwartetem Wert. Ich habe darüber gelesen und es scheint, dass ich lokal eine ausführbare Armhf-Datei erstellen muss, um es gdb
verarbeiten zu können. Aber ich schätze, es braucht auch eine Armhf-orientierte gdb
Version für amd64, also habe ich versucht, es zu installieren crossbuild-essential-armhf
. Dafür habe ich die Armhf-Architektur mit hinzugefügt dpkg --add-architecture armhf
, aber dann kann ich kein apt-get-Update durchführen. Ich bekomme eine ganze Menge davon:
Err http://security.ubuntu.com trusty-security/main armhf Packages
404 Not Found [IP: 2001:67c:1562::13 80]
Wenn ich die Repos überprüfe, haben sie tatsächlich nirgendwo armhf.
Also, was mache ich falsch? Ist dies außerdem die richtige Methode zum Remote-Debuggen mit einer anderen Architektur oder gibt es eine bessere Möglichkeit, dies zu tun?
Antwort1
Ubuntu verwendet separate Repos für armh (dh http://ports.ubuntu.com/
). Um crossbuild-essential-armhf erfolgreich installieren zu können, müssen Sie diese Schritte befolgen:
laufen
dpkg --add-architecture armhf
/etc/apt/sources.list
Geben Sie für ALLE Ihre Apt-Deb-Zeilen in und die richtige Architektur an/etc/apt/sources.list.d
, zum Beispiel:deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu trusty main universe deb [arch=armhf] http://ports.ubuntu.com/ trusty main universe
Beachten Sie, dass es keinen Sinn macht, den Arch für deb-src-Zeilen anzugeben. 3. ausführen apt-get update
4. ausführenapt-get install crossbuild-essential-armhf
Schauen Sie sich anhttps://wiki.debian.org/Multiarch/HOWTO
Möglicherweise möchten Sie diese Befehle auch in einem Chroot (oder vielleicht einem Docker-Container) ausführen, wie in diesem Handbuch beschrieben:Erste Schritte mit MultiArch (armel / armhf) in Ubuntu
Antwort2
Hier gibt es eine große Auswahl an Docker-basierten Cross-Compilern:
Antwort3
Es ist nicht notwendig, armhf zu den Dpkg-Quellen des Build-Hosts hinzuzufügen. Ein anderer Ansatz ist die Verwendung eines Chroots, das mit debootstrap oder einem beagleboard.org-Image gefüllt werden kann.
Eine ausführliche Anleitung zur C++-Cross-Kompilierung mit Remote-GDB-symbolischem Debuggen mit VS Code finden Sie unter: