[LINUX] Cross-Compiling für Raspberry Pi Zero unter Debian-Versuchen Sie, Ihre eigene gemeinsam genutzte Bibliothek zu erstellen

Überblick

Dies ist eine Fortsetzung dieser Artikel.

Erstellen Sie eine einfache gemeinsam genutzte Bibliothek und ein Programm, das die gemeinsam genutzte Bibliothek unter Debian (von VirtualBox unter Windows 10) aufruft und auf Raspberry Pi ausführt.

Umgebung

Host: Debian 10.6.0 <Virtual Box 6.1 <Windows10 Ziel: Himbeer Pi 3 Modell A +

Letztes Mal wurde von Raspberry Pi Zero auf Raspberry Pi 3 geändert. Der Grund dafür ist, dass die Kreuzkompilierung von Raspberry Pi Zero für die CPU der ARM v6-Serie nicht gut funktioniert hat.

Die CPUs der Raspberry Pi 3 für ARM v8-Serie bestanden problemlos.

Es klingt wie ein Fehler im Compiler, aber wenn jemand weiß, was los ist, lassen Sie es mich bitte wissen.

Dieses Programm

Es ist nichts drin, aber das Testprogramm sieht so aus.

test_so_lib.h


#ifndef TEST_SO_LIB_H
#define TEST_SO_LIB_H

void print_hoge (int num);

#endif

test_so_lib.c


#include <stdio.h>
#include "test_so_lib.h"

void
print_hoge (int num)
{
  int i;
  for (i = 0; i < num; i++) {
    printf("hogehoge\n");
  }
}

main.c


#include "test_so_lib.h"

int
main (void)
{
  print_hoge(5);
  return 0;
}

Wenn Sie dies normal erstellen und ausführen, sieht es so aus.

$ gcc -shared test_so_lib.c -o libtestso.so
$ gcc test_so_main.c -o test_so_main -I./ -L./ -Wl,-rpath=./ -ltestso
$ ./test_so_main
hogehoge
hogehoge
hogehoge
hogehoge
hogehoge

Versuchen Sie es mit Cross-Compiling

Für Raspberry Pi Zero

Eine kurze Geschichte über den schlechten Raspberry Pi Zero ... Die Build-Umgebung ist in Letzter Artikel dargestellt. In dieser Umgebung sieht es so aus ...

Debian


$ arm-linux-gnueabi-gcc -march=armv6 -shared test_so_lib.c -o libtestso_armv6.so
$ arm-linux-gnueabi-gcc -march=armv6 test_so_main.c -o test_so_main_armv6 -I./ -L./ -Wl,-rpath=./ -ltestso_armv6

Kopieren Sie test_so_main_armv6, libtestso_armv6.so vom Build nach Raspberry Pi Zero und führen Sie es aus.

RaspberryPiZero


$ ./test_so_main_armv6
./test_so_main_armv6: error while loading shared libraries: libtestso_armv6.so: cannot open shared object file: No such file or directory

Ich habe einen Fehler bekommen. Es sieht so aus, als ob die gemeinsam genutzte Bibliothek libtestso_armv6.so nicht gefunden werden kann. Ich bin mir nicht sicher warum.

Für Raspberry Pi 3

Umgebung erstellen

Verwenden Sie den Cross-Compiler für armhf, um die ARM v8-Serie von Raspberry Pi 3 zu erstellen. In Letzter Artikel wird die Stelle, an der "armel" geschrieben ist, auf "armhf" korrigiert und sieht so aus.

Installation des Armhf Cross Compilers

$ sudo apt install crossbuild-essential-armhf

Hinzufügung von Architektur

$ sudo dpkg --add-architecture armhf
$ sudo nano /etc/apt/sources.list

/etc/apt/sources.list


deb [arch=armel,armhf] http://ftp.jp.debian.org/debian buster main

Ich benutze diesmal keinen Armel, aber wenn Sie beide verwenden möchten, sollten Sie so schreiben.

$ sudo apt update
$ sudo apt install libusb-dev:armhf
$ sudo apt install libjpeg-dev:armhf

Übrigens werde ich dieses Mal nur meine eigene gemeinsam genutzte Bibliothek verwenden, daher muss ich nur "crossbuild-essential-armhf" installieren. (Ich habe bisher mein eigenes Memo geschrieben)

Bauen

Die von -march angegebene Architektur ist armv8-a. (Es scheint, dass "armv8" nicht angegeben werden kann)

Debian


$ arm-linux-gnueabihf-gcc -march=armv8-a -shared test_so_lib.c -o libtestso_armv8a.so
$ arm-linux-gnueabihf-gcc -march=armv8-a test_so_main.c -o test_so_main_armv8a -I./ -L./ -Wl,-rpath=./ -ltestso_armv8a

Kopieren Sie die Builds test_so_main_armv8a und libtestso_armv8a.so nach Raspberry Pi 3 und führen Sie sie aus.

RaspberryPi3


$ ./test_so_main_armv8a
hogehoge
hogehoge
hogehoge
hogehoge
hogehoge

Es bewegte sich leicht.

Zusammenfassung

Ich habe es für "armv6" mit "arm-linux-gnueabi-gcc" gebaut und war eine Weile besorgt, weil es mit Raspberry Pi Zero nicht funktioniert hat, aber mit "arm-linux-gnueabihf-gcc" ist es dasselbe für "armv8-a" Wenn ich sehe, dass es gemäß dem Verfahren erstellt wurde und leicht funktioniert, denke ich, dass "arm-linux-gnueabi-gcc" selbst ein wenig verdächtig ist.

Möglicherweise sind zum Zeitpunkt der Erstellung einige Optionen erforderlich, oder die Umgebung reicht nicht aus, aber ich bin mir nicht sicher. Bitte lassen Sie mich wissen, wenn jemand davon weiß.

Recommended Posts

Cross-Compiling für Raspberry Pi Zero unter Debian-Versuchen Sie, Ihre eigene gemeinsam genutzte Bibliothek zu erstellen
Cross-Compilierung für Raspberry Pi Zero unter Debian-Try unter Verwendung einer gemeinsam genutzten Bibliothek
Cross-Compilierung für Raspberry Pi Zero unter Ubuntu gestartet
[Python] Registrieren Sie Ihre eigene Bibliothek in PyPI
Schalten Sie Ihren PC mit Himbeer-Pi ein / aus
Pigpio auf Himbeer-Pi
Steuern Sie bürstenlose Motoren mit GPIO von Raspberry Pi Zero
Installieren Sie PyCall auf Raspberry PI und versuchen Sie, die GPIO-Bibliothek für Python von Ruby zu verwenden
Cython auf Raspberry Pi
Führen Sie das AWS IoT Device SDK für Python auf Raspberry Pi aus
Zugriff auf Google Spreadsheets Verwenden von Python mit Himbeer-Pi (für sich selbst)
Pyenv auf Raspberry Pi eingeführt
Verwenden Sie NeoPixel mit Himbeerkuchen
Installieren Sie OpenCV4 auf Raspberry Pi 3
Installieren Sie TensorFlow 1.15.0 auf Raspberry Pi
Erstellen Sie Ihre eigene IoT-Plattform mit Himbeerpi und ESP32 (Teil 1)
Rufen Sie mit ctypes Ihre eigene gemeinsam genutzte Bibliothek in C-Sprache von Python aus auf
Testen der Kommunikation mit Raspberry Pi
MQTT auf Raspberry Pi und Mac
Himbeer Pi 4 Centos7 auf Docker installieren
Installieren Sie ghoto2 auf Raspberry Pi (Hinweis)
Versuchen Sie, k-NN selbst zu implementieren
Himbeer-Pi-Grundeinstellung (für mich)
Versuchen Sie es mit ArUco mit Raspberry Pi
OpenCV-Installationsverfahren auf Raspberry Pi
Ein- / Ausschalten von Raspberry Pi mit Arduino
Erkennen Sie den Schalterstatus mit Raspberry Pi 3
Installieren Sie OpenMedia Vault 5 auf Raspberry Pi 4
L Chika mit Himbeer-Pi C #
Erstellen Sie wxPython unter Ubuntu 20.04 auf Himbeer-Pi 4
Verwenden wir die Skriptsprache für ein komfortables C ++ - Leben. 4 - Verwenden wir die eigene C ++ - Bibliothek aus der Skriptsprache. -
Grundeinstellungen für die Verwendung des Grove Pi + Starterkits und der Kamera mit Raspberry Pi