View a markdown version of this page

Behebung von Build-Problemen im C++ Producer SDK für Raspberry Pi - Amazon Kinesis Video Streams

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Behebung von Build-Problemen im C++ Producer SDK für Raspberry Pi

Wenn Sie auf ein Build-Problem stoßen und verschiedene CMake-Argumente ausprobieren möchten, stellen Sie sicher, dass Sie einen sauberen Build durchführen. Löschen Sie die build Ordner open-sourcedependency, und, bevor Sie es erneut versuchen.

Probleme mit OpenSSL erstellen

Wenn Sie eine Ausgabe erhalten, die der folgenden ähnelt, deutet dies darauf hin, dass OpenSSL Ihre Systemarchitektur falsch erkannt hat.

crypto/md5/md5-aarch64.S: Assembler messages: crypto/md5/md5-aarch64.S:3: Error: unrecognized symbol type "" crypto/md5/md5-aarch64.S:6: Error: bad instruction `stp x19,x20,[sp,#-80]!' crypto/md5/md5-aarch64.S:7: Error: bad instruction `stp x21,x22,[sp,#16]' crypto/md5/md5-aarch64.S:8: Error: bad instruction `stp x23,x24,[sp,#32]' crypto/md5/md5-aarch64.S:9: Error: bad instruction `stp x25,x26,[sp,#48]'

In diesem Beispiel wird versucht, eine 64-Bit-Version (linux-aarch64) zu erstellen, obwohl dieser Raspberry Pi tatsächlich 32-Bit ist. Einige Raspberry Pi-Geräte haben einen 64-Bit-Kernel, aber einen 32-Bit-Benutzerbereich.

Ermitteln Sie, für welche Architektur OpenSSL zu bauen versucht. Sie finden die Log-Zeile während des configure Schritts für OpenSSL:

[ 33%] Performing update step for 'project_libopenssl' -- Already at requested tag: OpenSSL_1_1_1t [ 44%] No patch step for 'project_libopenssl' [ 55%] Performing configure step for 'project_libopenssl' Operating system: x86_64-whatever-linux2 Configuring OpenSSL version 1.1.1t (0x1010114fL) for linux-x86_64 Using os-specific seed configuration Creating configdata.pm Creating Makefile

Verifizieren Sie die Architektur Ihres Systems:

  • Überprüfen Sie die Kernel-Bitness: führen Sie aus uname -m

  • Überprüfe die Bitanzahl des Benutzerbereichs: run getconf LONG_BIT

Sie können Ihre CPU-Informationen auch mit cat /proc/cpuinfo unseren Befehlen überprüfen. lscpu

Auflösung

Um dieses Problem zu beheben, fügen Sie beim Erstellen das folgende CMake-Argument hinzu, um sicherzustellen, dass OpenSSL für die 32-Bit-ARM-Architektur korrekt erstellt wird:

-DBUILD_OPENSSL_PLATFORM=linux-armv4

Beheben Sie Probleme beim Laden von kvssink in GStreamer

Bestätigen GST_PLUGIN_PATH

Stellen Sie sicher, dass die GST_PLUGIN_PATH Umgebungsvariable in Ihrer aktuellen Shell-Sitzung auf das Verzeichnis verweist, das Folgendes enthältkvssink. Umgebungsvariablen sind sitzungsspezifisch, daher müssen Sie sie für jede neue Sitzung festlegen. Wie Sie diese Änderung dauerhaft vornehmen können, finden Sie unter „Aktualisieren Sie das Startskript Ihrer Shell, sodass auch die Umgebungsvariable GST_PLUGIN_PATH gesetzt wird“.

Fehler: Die gemeinsame Objektdatei kann nicht geöffnet werden: Keine solche Datei oder kein solches Verzeichnis

Wenn der Fehler auftrittCannot open shared object file: No such file or directory, führen Sie den folgenden Befehl aus:

gst-inspect-1.0 /path/to/libgstkvssink.so

Wenn Sie die folgende Ausgabe erhalten, bedeutet dies, dass der dynamische Linker die erforderlichen Bibliotheken für kvssink nicht finden kann. Dies geschieht in der Regel aufgrund von:

  • Umzug kvssink an einen anderen Ort als den Ort, an dem es gebaut wurde.

  • Cross-compiling für die falsche CPU-Architektur.

  • Eine erforderliche Abhängigkeit fehlt.

Ausgabe:

WARNING: erroneous pipeline: no element "kvssink" error while loading shared libraries: libcproducer.so: cannot open shared object file: No such file or directory

Auflösung

Fügen Sie bei verschobenen Bibliotheken das Verzeichnis mit den fehlenden Bibliotheken zu hinzuLD_LIBRARY_PATH.

Im Stammverzeichnis des ursprünglichen Repositorys können Sie die fehlende Bibliothek mithilfe des find Dienstprogramms finden. Geben Sie im Terminal Folgendes ein:

find . -name "*libcproducer*"

Ausgabe:

./build/dependency/libkvscproducer/kvscproducer-src/libcproducer.so

Das Dateipfadtrennzeichen auf Linux-Geräten lautet:. Mit dem folgenden Befehl wird ein neuer Ordnerpfad an die vorhandene LD_LIBRARY_PATH Umgebungsvariable angehängt, wobei alle vorherigen Werte beibehalten werden.

Geben Sie in Ihrem Terminal Folgendes ein:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/build/dependency/libkvscproducer/kvscproducer-src
Wichtig

Umgebungsvariablen sind sitzungsspezifisch. Um Änderungen sitzungsübergreifend beizubehalten, ändern Sie das Startskript Ihrer Shell.

Möglicherweise müssen Sie das auch zu Ihrem open-source/local/lib $LD_LIBRARY_PATH hinzufügen.

Fehler:. /path/to/libcproducer.so.1: Ungültiger ELF-Header

Wenn Sie diesen Fehler beim Laden gemeinsam genutzter Bibliotheken erhalten, kann das an defekten symbolischen Links () liegen. symlinks Symlinks können kaputt gehen, wenn das Betriebssystem des Host-Computers nicht mit dem des Zielcomputers übereinstimmt. Zum Beispiel Cross-Compilierung auf einem MacBook für einen Raspberry Pi.

Eine weitere mögliche Ursache ist, dass die erstellten Binärdateien für die falsche Architektur bestimmt waren. Zum Beispiel, wenn die Binärdateien für x86 gebaut wurden (Raspberry Pi verwendet ARM-CPUs).

Navigieren Sie zu dem im Fehler angegebenen Speicherort der Bibliothek und geben Sie: ein, um die Bibliothek ls -la zu überprüfen. symlinks

Antwort:

drwxr-xr-x 16 me staff 512 Sep 10 17:16 . drwxr-xr-x 7 me staff 224 Jan 6 23:46 .. drwxr-xr-x 4 me staff 128 Sep 10 17:16 engines-1.1 -rwxr-xr-x 1 me staff 2294496 Sep 10 17:16 libcrypto.1.1.so -rw-r--r-- 1 me staff 4002848 Sep 10 17:16 libcrypto.a lrwxr-xr-x 1 me staff 19 Sep 10 17:16 libcrypto.so -> libcrypto.1.1.so -rwxr-xr-x 1 me staff 631176 Sep 10 17:12 liblog4cplus-2.0.3.so lrwxr-xr-x 1 me staff 24 Sep 10 17:12 liblog4cplus.so -> liblog4cplus-2.0.3.so -rwxr-xr-x 1 me staff 1012 Sep 10 17:12 liblog4cplus.a -rwxr-xr-x 1 me staff 694328 Sep 10 17:12 liblog4cplusU-2.0.3.so lrwxr-xr-x 1 me staff 25 Sep 10 17:12 liblog4cplusU.dylib -> liblog4cplusU-2.0.3.so -rwxr-xr-x 1 me staff 1017 Sep 10 17:12 liblog4cplusU.a -rwxr-xr-x 1 me staff 536416 Sep 10 17:16 libssl.1.1.so -rw-r--r-- 1 me staff 795184 Sep 10 17:16 libssl.a lrwxr-xr-x 1 me staff 16 Sep 10 17:16 libssl.so -> libssl.1.1.so drwxr-xr-x 6 me staff 192 Sep 10 17:16 pkgconfig

In der obigen Beispielausgabe symlinks sind sie nicht kaputt. Bei Broken zeigen symlinks keine Pfeile auf ihre Ziele.

Auflösung

Es gibt zwei Möglichkeiten, die Symlinks zu korrigieren:

  • Empfohlen: Erstellen Sie das symlink mit dem ln Befehl neu. Type:

    ln -s /path/to/actual/library /path/to/symlink
  • Kopieren Sie die eigentliche Bibliotheksdatei und benennen Sie sie um, damit sie mit der symlink übereinstimmt.

    Anmerkung

    Diese Option führt zu einer erhöhten Speichernutzung.

Es hat sich bewährt, auf demselben Betriebssystem mit Tools wie Docker zu kompilieren, um Probleme bei der Kreuzkompilierung zu vermeiden.

Fehlende Abhängigkeiten:

Wenn der Name der fehlenden Bibliothek mit beginntlibkvs, lesen Sie den Abschnitt „Verschiebte Bibliotheken“ weiter oben, um die Kinesis Video Streams-Bibliotheken vom Host-Gerät auf das Zielgerät zu installieren.

Gehen Sie andernfalls wie folgt vor, Installieren Sie die Softwarevoraussetzungen um sicherzustellen, dass alle Voraussetzungen für Open-Source-Software auf dem Zielgerät installiert sind.