

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Risoluzione dei problemi di compilazione su C\+\+ Producer SDK per Raspberry Pi
<a name="troubleshoot-rpi"></a>

Se riscontri un problema di compilazione e desideri provare CMake argomenti diversi, assicurati di eseguire una build pulita. Elimina le `build` cartelle `open-source``dependency`, e prima di riprovare.

## Problemi di creazione con OpenSSL
<a name="troubleshoot-rpi-build"></a>

Se ricevete un output simile al seguente, significa che OpenSSL ha rilevato erroneamente l'architettura del sistema.

```
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 questo esempio, sta tentando di creare una versione a 64 bit (`linux-aarch64`) quando questo Raspberry Pi è in realtà a 32 bit. Alcuni dispositivi Raspberry Pi hanno un kernel a 64 bit, ma uno spazio utente a 32 bit.

Determina per quale architettura OpenSSL sta cercando di creare. Puoi trovare la riga di registro durante la `configure` fase per 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
```

Verifica l'architettura del tuo sistema:
+ Controlla la bitness del kernel: esegui `uname -m`
+ Verifica la dimensione in bit dello spazio utente: run `getconf LONG_BIT`

Puoi anche rivedere le informazioni sulla CPU con i comandi `cat /proc/cpuinfo` or`lscpu`. 

**Risoluzione:**

Per risolvere questo problema, aggiungi il seguente CMake argomento durante la compilazione, per assicurarti che OpenSSL venga compilato correttamente per l'architettura ARM a 32 bit:

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

## Risolvi i problemi di caricamento in `kvssink` GStreamer
<a name="troubleshoot-rpi-kvssink"></a>

Conferma `GST_PLUGIN_PATH`

Assicurati che la variabile di `GST_PLUGIN_PATH` ambiente nella sessione di shell corrente punti alla directory contenente`kvssink`. Le variabili di ambiente sono specifiche della sessione, quindi dovrai impostarle per ogni nuova sessione. Per rendere permanente questa modifica, vedi «Aggiorna lo script di avvio della shell per includere l'impostazione della variabile di ambiente GST\_PLUGIN\_PATH». 

**Errore: impossibile aprire il file oggetto condiviso: nessun file o directory di questo tipo**

Se si verifica l'errore`Cannot open shared object file: No such file or directory`, esegui il comando seguente:

```
gst-inspect-1.0 /{{path}}/{{to}}/libgstkvssink.so
```

Se ricevete il seguente output, significa che il linker dinamico non è in grado di individuare le librerie richieste per`kvssink`. Ciò si verifica in genere a causa di:
+ `kvssink`Trasferimento in un luogo diverso da quello in cui è stato costruito.
+ Compilazione incrociata per l'architettura della CPU sbagliata.
+ Manca una dipendenza richiesta.

**Output:**

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

**Risoluzione:**

Per le **librerie spostate**, aggiungi la directory contenente le librerie mancanti a`LD_LIBRARY_PATH`.

Dalla directory principale del repository originale, è possibile individuare la libreria mancante utilizzando l'`find`utilità. Nel terminale, digitate: 

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

**Output:**

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

Il separatore del percorso dei file sui dispositivi Linux è`:`. Il comando seguente aggiunge un nuovo percorso di cartella alla variabile di `LD_LIBRARY_PATH` ambiente esistente, preservando i valori precedenti. 

Nel tuo terminale, digita:

```
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/{{path}}/{{to}}/{{build}}/{{dependency}}/libkvscproducer/kvscproducer-src
```

**Importante**  
Le variabili di ambiente sono specifiche della sessione. Per mantenere le modifiche tra le sessioni, modifica lo script di avvio della shell.

Potrebbe anche essere necessario aggiungere il file `open-source/local/lib` al tuo`$LD_LIBRARY_PATH`.

**Errore:. /path/to/libcproducer.so.1:** intestazione ELF non valida

Se ricevi questo errore durante il caricamento delle **librerie condivise**, potrebbe essere dovuto a collegamenti simbolici non funzionanti (). `symlinks` I collegamenti simbolici possono interrompersi se il sistema operativo della macchina host non corrisponde a quello della macchina di destinazione. Ad esempio, la compilazione incrociata su un Raspberry MacBook Pi.

Un'altra possibile causa è che i file binari compilati erano per l'architettura sbagliata. Ad esempio, se i binari sono stati creati per x86 (Raspberry Pi utilizza ARM). CPUs

Vai alla posizione della libreria specificata nell'errore e digita: `ls -la` per ispezionare la libreria. `symlinks`

**Risposta:**

```
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
```

Nell'output di esempio riportato sopra, non `symlinks` sono interrotti. Broken `symlinks` non avrà frecce che puntano verso i bersagli.

**Risoluzione:**

Esistono due opzioni per correggere i collegamenti simbolici:
+ **Consigliato:** ricrea il file `symlink` con il `ln` comando. Type:

  ```
  ln -s /path/to/actual/library /path/to/symlink
  ```
+ Copiate il file della libreria attuale e rinominatelo in modo che corrisponda a. `symlink`
**Nota**  
Questa opzione comporta un maggiore utilizzo dello spazio di archiviazione. 

Come best practice, compila sullo stesso sistema operativo utilizzando strumenti come Docker per evitare problemi di compilazione incrociata. 

**Dipendenze mancanti:**

Se il nome della libreria mancante inizia con`libkvs`, consulta la sezione precedente dedicata alle «librerie spostate» per installare le librerie Kinesis Video Streams dal dispositivo host al dispositivo di destinazione. 

Altrimenti, segui questa procedura [Installa i prerequisiti del software](producersdk-cpp-rpi-software.md) per assicurarti che tutti i prerequisiti del software open source siano installati sul dispositivo di destinazione.