

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
<a name="troubleshoot-rpi"></a>

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-source``dependency`, und, bevor Sie es erneut versuchen.

## Probleme mit OpenSSL erstellen
<a name="troubleshoot-rpi-build"></a>

Wenn Sie eine Ausgabe ähnlich der folgenden erhalten, 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 Protokollzeile 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
```

Überprüfen Sie die Architektur Ihres Systems:
+ Überprüfen Sie die Kernel-Bitanzahl: run `uname -m`
+ Überprüfen Sie den Benutzerbereich bit-ness: run `getconf LONG_BIT`

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

**Auflösung**

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

```
-DBUILD_OPENSSL_PLATFORM=linux-armv4 
```

## Beheben Sie Probleme `kvssink` beim Laden in GStreamer
<a name="troubleshoot-rpi-kvssink"></a>

Bestätigen `GST_PLUGIN_PATH`

Stellen Sie sicher, dass die `GST_PLUGIN_PATH` Umgebungsvariable in Ihrer aktuellen Shell-Sitzung auf das Verzeichnis verweist, das enthält`kvssink`. Umgebungsvariablen sind sitzungsspezifisch, sodass Sie sie für jede neue Sitzung festlegen müssen. Informationen dazu, wie Sie diese Änderung dauerhaft vornehmen können, finden Sie unter „Aktualisieren Sie das Startskript Ihrer Shell, sodass es die Einstellung der Umgebungsvariablen GST\_PLUGIN\_PATH einschließt“. 

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

Wenn der Fehler auftritt`Cannot 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 ist in der Regel auf folgende Ursachen zurückzuführen:
+ Umzug `kvssink` an einen anderen Ort als den, an dem es gebaut wurde.
+ Cross-Compilierung 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 für **verschobene Bibliotheken** das Verzeichnis hinzu, das die fehlenden Bibliotheken enthält`LD_LIBRARY_PATH`.

Im Stammverzeichnis des ursprünglichen Repositorys können Sie mit dem `find` Hilfsprogramm nach der fehlenden Bibliothek suchen. Geben Sie im Terminal Folgendes ein: 

```
find . -name "*{{libcproducer}}*" 
```

**Ausgabe:**

```
./{{build}}/{{dependency}}/libkvscproducer/kvscproducer-src/libcproducer.so
```

Das Dateipfadtrennzeichen auf Linux-Geräten ist`:`. Mit dem folgenden Befehl wird ein neuer Ordnerpfad an die bestehende `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 dies an defekten symbolischen Links () `symlinks` liegen. Symlinks können kaputt gehen, wenn das Betriebssystem des Host-Computers nicht mit dem des Zielcomputers übereinstimmt. Zum Beispiel Cross-Compiling 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 erstellt wurden (Raspberry Pi verwendet ARM CPUs).

Navigieren Sie zum Speicherort der Bibliothek, der im Fehler angegeben wurde, und geben Sie: ein`ls -la`, um die Bibliothek `symlinks` zu überprüfen.

**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 defekt. Bei Broken zeigen `symlinks` keine Pfeile auf ihre Ziele.

**Auflösung**

Es gibt zwei Optionen, um die Symlinks zu korrigieren:
+ **Empfehlung:** 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 entsprechend um. `symlink`
**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 Cross-Compilierung zu vermeiden. 

**Fehlende Abhängigkeiten:**

Wenn der fehlende Bibliotheksname mit beginnt`libkvs`, finden Sie im Abschnitt „verschobene Bibliotheken“ weiter oben Informationen zur Installation der Kinesis Video Streams Streams-Bibliotheken vom Host-Gerät auf das Zielgerät. 

Andernfalls gehen Sie wie folgt vor, [Installieren Sie die Softwarevoraussetzungen](producersdk-cpp-rpi-software.md) um sicherzustellen, dass alle erforderlichen Open-Source-Softwarekomponenten auf dem Zielgerät installiert sind.