

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Résolution des problèmes de compilation sur le SDK C\$1\$1 Producer pour Raspberry Pi
<a name="troubleshoot-rpi"></a>

Si vous rencontrez un problème de compilation et que vous souhaitez essayer différents CMake arguments, veillez à effectuer une nouvelle génération. Supprimez les `build` dossiers `open-source``dependency`, et avant de réessayer.

## Problèmes de création avec OpenSSL
<a name="troubleshoot-rpi-build"></a>

Si vous recevez un résultat similaire à ce qui suit, cela indique qu'OpenSSL a mal détecté l'architecture de votre système.

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

Dans cet exemple, il tente de créer une version 64 bits (`linux-aarch64`) alors que ce Raspberry Pi est en réalité 32 bits. Certains appareils Raspberry Pi ont un noyau 64 bits, mais un espace utilisateur 32 bits.

Déterminez l'architecture pour laquelle OpenSSL essaie de créer. Vous pouvez trouver la ligne de journal lors de l'`configure`étape pour 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
```

Vérifiez l'architecture de votre système :
+ Vérifiez le nombre de bits du noyau : exécutez `uname -m`
+ Vérifiez le nombre de bits de l'espace utilisateur : exécuter `getconf LONG_BIT`

Vous pouvez également consulter les informations relatives à votre processeur à l'aide des `lscpu` commandes `cat /proc/cpuinfo` ou. 

**Résolution :**

Pour résoudre ce problème, ajoutez l' CMake argument suivant lors de la création, afin de vous assurer qu'OpenSSL se construit correctement pour l'architecture ARM 32 bits :

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

## Résoudre les problèmes `kvssink` de chargement dans GStreamer
<a name="troubleshoot-rpi-kvssink"></a>

Confirmer `GST_PLUGIN_PATH`

Assurez-vous que la variable d'`GST_PLUGIN_PATH`environnement de votre session shell en cours pointe vers le répertoire contenant`kvssink`. Les variables d'environnement étant spécifiques à une session, vous devez les définir pour chaque nouvelle session. Pour rendre cette modification permanente, consultez « Mettre à jour le script de démarrage de votre shell pour inclure la définition de la variable d'environnement GST\$1PLUGIN\$1PATH ». 

**Erreur : Impossible d'ouvrir le fichier objet partagé : aucun fichier ou répertoire de ce type**

Si le message d'erreur s'affiche`Cannot open shared object file: No such file or directory`, exécutez la commande suivante :

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

Si vous recevez le résultat suivant, cela indique que l'éditeur de liens dynamiques ne parvient pas à localiser les bibliothèques requises pour`kvssink`. Cela se produit généralement pour les raisons suivantes :
+ Déménagement `kvssink` vers un endroit différent de celui où il a été construit.
+ Compilation croisée pour une architecture de processeur incorrecte.
+ Une dépendance requise est manquante.

**Sortie** :

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

**Résolution :**

Pour les **bibliothèques déplacées**, ajoutez le répertoire contenant les bibliothèques manquantes à`LD_LIBRARY_PATH`.

À partir du répertoire racine du dépôt d'origine, vous pouvez localiser la bibliothèque manquante à l'aide de l'`find`utilitaire. Dans le terminal, tapez : 

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

**Sortie** :

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

Le séparateur de chemin de fichier sur les appareils Linux est`:`. La commande ci-dessous ajoute un nouveau chemin de dossier à la variable d'`LD_LIBRARY_PATH`environnement existante, en préservant les valeurs précédentes. 

Dans votre terminal, saisissez :

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

**Important**  
Les variables d'environnement sont spécifiques à la session. Pour conserver les modifications d'une session à l'autre, modifiez le script de démarrage de votre shell.

Vous devrez peut-être également ajouter le `open-source/local/lib` à votre`$LD_LIBRARY_PATH`.

**Erreur :. /path/to/libcproducer.so.1 : en-tête ELF non valide**

Si vous recevez cette erreur lors du chargement des **bibliothèques partagées**, cela peut être dû à des liens symboliques rompus (`symlinks`). Les liens symboliques peuvent être interrompus si le système d'exploitation de la machine hôte ne correspond pas à celui de la machine cible. Par exemple, la compilation croisée sur un MacBook pour un Raspberry Pi.

Une autre cause possible est que les fichiers binaires créés étaient destinés à la mauvaise architecture. Par exemple, si les fichiers binaires ont été conçus pour x86 (le Raspberry Pi utilise ARM CPUs).

Accédez à l'emplacement de bibliothèque spécifié dans l'erreur et tapez : `ls -la` pour inspecter la bibliothèque`symlinks`.

**Réponse :**

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

Dans l'exemple de sortie ci-dessus, `symlinks` ils ne sont pas cassés. Les Broken n'`symlinks`auront pas de flèches pointant vers leurs cibles.

**Résolution :**

Il existe deux options pour corriger les liens symboliques :
+ **Recommandé :** Recréez le `symlink` avec la `ln` commande. Type :

  ```
  ln -s /path/to/actual/library /path/to/symlink
  ```
+ Copiez le fichier de bibliothèque actuel et renommez-le pour qu'il corresponde au`symlink`.
**Note**  
Cette option entraîne une augmentation de l'utilisation du stockage. 

La meilleure pratique consiste à compiler sur le même système d'exploitation à l'aide d'outils tels que Docker pour éviter les problèmes de compilation croisée. 

**Dépendances manquantes :**

Si le nom de bibliothèque manquant commence par`libkvs`, consultez la section « bibliothèques déplacées » ci-dessus pour installer les bibliothèques Kinesis Video Streams de l'appareil hôte vers l'appareil cible. 

Dans le cas [Installation des prérequis logiciels](producersdk-cpp-rpi-software.md) contraire, assurez-vous que tous les logiciels open source requis sont installés sur l'appareil cible.