Führen Sie ein C-Sprachprogramm aus, das auf Debain auf Raspberry Pi Zero kompiliert wurde. Ich möchte eine Umgebung erstellen, in der ich gemeinsam genutzte Bibliotheken verwenden kann. Verwenden wir vorerst "libusb" oder "libjpeg".
Ich fahre fort mit Cross-Compilierung für Raspberry Pi Zero unter Ubuntu beginnen und versuche es erneut mit Debian als Host-Computer (aus einem späteren Grund).
Host: Debian 10.6.0 <Virtual Box 6.1 <Windows10 Ziel: Raspberry Pi Zero WH
$ sudo apt install crossbuild-essential-armel
Letztes Mal hat versucht, g ++ - arm-linux-gnueabi
zu installieren, aber es scheint in crossbuild-essential-armel
enthalten zu sein Also werde ich das installieren. Immerhin ist es gcc, das ich benutze, also macht es keinen großen Unterschied.
Architektur hinzufügen,
$ sudo dpkg --add-architecture armel
Source.list
bearbeiten. Ich werde das Repository hinzufügen, auf das apt
verweist.
$ sudo nano /etc/apt/sources.list
Fügen Sie am Ende von "sources.list" Folgendes hinzu. Informationen zu Armel finden Sie auch unter ftp.jp.debian.org.
/etc/apt/sources.list
deb [arch=armel] http://ftp.jp.debian.org/debian buster main
Aktualisieren und installieren Sie die Bibliothek. Sie können die Bibliothek für "armel" erhalten, indem Sie ": armel" hinzufügen.
$ sudo apt update
$ sudo apt install libusb-dev:armel
$ sudo apt install libjpeg-dev:armel
Wenn das Paket für Ubuntu Armel veröffentlicht wird, kann ich das gleiche mit Ubuntu tun, indem ich es zu "sources.list" hinzufüge, aber ich habe festgestellt, dass ich das Armel-Paket für Ubuntu veröffentlicht habe nicht.
試しにUbuntuでftp.jp.debian.org/debianを追加してみましたが、「署名されてません」みたいなエラーが出てインストールできませんでした。そりゃそうか。
Gibt es eine Möglichkeit, es zwangsweise zu installieren? (Ich konnte die .deb bringen und installieren, aber ich gab auf, weil die Abhängigkeit schwierig wurde)
Klicken Sie hier, um das Programm anzuzeigen, das dieses Mal erstellt werden soll.
testUsbLib.c
#include <stdio.h>
#include <usb.h>
int main()
{
printf("call usb_init()\n");
usb_init();
printf("OK\n");
return 0;
}
Ein nutzloses Programm, das nur "usb_init ()" aufruft.
Es bereinigt usb_init ()
nicht (musste ich etwas tun ...?).
Bauen Sie hier.
$ arm-linux-gnueabi-gcc -march=armv6 testUsbLib.c -o testUsbLib_armv6 -lusb
Wenn Sie oben erfolgreich erstellen können, kopieren Sie das generierte testUsbLib_armv6
in einen geeigneten Ordner auf Raspberry Pi Zero.
$ testUsbLib_armv6
call usb_init()
OK
Und so funktioniert es. Nichts passiert, aber ...
Da "libusb" nur wenige Abhängigkeiten hat, kann es ziemlich gut sein, selbst wenn Sie die .deb-Datei abrufen und manuell installieren, aber "libjpeg" usw. hat viele Abhängigkeiten und wird manuell aufgegeben, weil es zu viele Schritte gibt. Diese Methode hat es einschließlich der Abhängigkeiten installiert, sodass es anscheinend funktioniert hat.
Übrigens habe ich die Funktionsweise von "libtiff" zusätzlich zu "libusb" und "libjpeg" durch diese Methode bestätigt.
Wenn jemand weiß, ob dieselbe Methode unter Ubuntu verwendet werden kann (ob ein Paket für Armel veröffentlicht wurde usw.), lassen Sie es mich bitte wissen.
Ich habe den folgenden Artikel geschrieben.
Recommended Posts