

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Solución de problemas de compilación en el SDK productor de C\+\+ para Raspberry Pi
<a name="troubleshoot-rpi"></a>

Si te encuentras con un problema de compilación y quieres probar diferentes argumentos de CMake, asegúrate de realizar una compilación limpia. Elimina las `build` carpetas `open-source``dependency`, y antes de volver a intentarlo.

## Problemas de compilación con OpenSSL
<a name="troubleshoot-rpi-build"></a>

Si recibe un resultado similar al siguiente, significa que OpenSSL ha detectado incorrectamente la arquitectura de su 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]'
```

En este ejemplo, está intentando crear una versión de 64 bits (`linux-aarch64`) cuando esta Raspberry Pi es en realidad de 32 bits. Algunos dispositivos Raspberry Pi tienen un núcleo de 64 bits, pero un espacio de usuario de 32 bits.

Determine para qué arquitectura está intentando compilar OpenSSL. Puedes encontrar la línea de registro durante el `configure` paso de 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
```

Verifique la arquitectura de su sistema:
+ Revise el tamaño de bits del kernel: ejecute `uname -m`
+ Revise la densidad de bits del espacio de usuario: ejecute `getconf LONG_BIT`

También puede revisar la información de la CPU con los comandos `cat /proc/cpuinfo` o`lscpu`. 

**Solución**:

Para resolver este problema, agrega el siguiente argumento de CMake al compilar, para asegurarte de que OpenSSL se compila correctamente para la arquitectura ARM de 32 bits:

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

## Soluciona los problemas de carga de kvssink en GStreamer ``
<a name="troubleshoot-rpi-kvssink"></a>

Confirme `GST_PLUGIN_PATH`

Asegúrese de que la variable de `GST_PLUGIN_PATH` entorno de su sesión de shell actual apunte al directorio que contiene`kvssink`. Las variables de entorno son específicas de la sesión, por lo que tendrás que configurarlas para cada nueva sesión. Para que este cambio sea permanente, consulta la sección «Actualiza el script de inicio de tu shell para incluir la configuración de la variable de entorno GST\_PLUGIN\_PATH». 

**Error: no se puede abrir el archivo de objeto compartido: no existe tal archivo o directorio **

Si se produce el error`Cannot open shared object file: No such file or directory`, ejecute el siguiente comando:

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

Si recibe el siguiente resultado, indica que el enlazador dinámico no puede encontrar las bibliotecas necesarias para`kvssink`. Esto suele ocurrir debido a:
+ Mudarse `kvssink` a un lugar diferente del lugar en el que se construyó.
+ Cross-compiling para una arquitectura de CPU incorrecta.
+ Falta una dependencia obligatoria.

**Salida:**

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

**Solución**:

En el ** caso de las bibliotecas trasladadas**, añada el directorio que contiene las bibliotecas que faltan a`LD_LIBRARY_PATH`.

Desde el directorio raíz del repositorio original, puede localizar la biblioteca que falta mediante la `find` utilidad. En la terminal, escriba: 

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

**Salida:**

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

El separador de rutas de archivos en los dispositivos Linux es`:`. El siguiente comando añade una nueva ruta de carpeta a la variable de `LD_LIBRARY_PATH` entorno existente, conservando los valores anteriores. 

En tu terminal, escribe:

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

**importante**  
Las variables de entorno son específicas de la sesión. Para que los cambios persistan entre las sesiones, modifique el script de inicio del shell.

Es posible que también tengas que añadirlo `open-source/local/lib` a tu`$LD_LIBRARY_PATH`.

**Error:. /path/to/libcproducer.so.1: encabezado ELF no válido **

Si recibes este error al cargar bibliotecas ** compartidas**, puede deberse a que los enlaces simbólicos están rotos (). `symlinks` Los enlaces simbólicos pueden interrumpirse si el sistema operativo de la máquina host no coincide con el de la máquina de destino. Por ejemplo, la compilación cruzada en una MacBook para una Raspberry Pi.

Otra posible causa es que los binarios compilados eran para una arquitectura incorrecta. Por ejemplo, si los binarios se crearon para x86 (Raspberry Pi usa CPU ARM).

Navega hasta la ubicación de la biblioteca especificada en el error y escribe: `ls -la` para inspeccionar la biblioteca. `symlinks`

**Respuesta**:

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

En el ejemplo de salida anterior, no `symlinks` están rotos. Los que `symlinks` estén rotos no tendrán flechas que apunten a sus objetivos.

**Solución**:

Hay dos opciones para corregir los enlaces simbólicos:
+ **Recomendado: ** vuelva a crearlos `symlink` con el `ln` comando. Escriba:

  ```
  ln -s /path/to/actual/library /path/to/symlink
  ```
+ Copie el archivo de biblioteca actual y cámbiele el nombre para que coincida con. `symlink`
**nota**  
Esta opción conduce a un mayor uso del almacenamiento. 

Como práctica recomendada, compile en el mismo sistema operativo con herramientas como Docker para evitar problemas de compilación cruzada. 

**Dependencias faltantes: **

Si el nombre de la biblioteca que falta empieza por`libkvs`, consulte la sección «bibliotecas trasladadas» que aparece más arriba para instalar las bibliotecas de Kinesis Video Streams del dispositivo host al dispositivo de destino. 

De lo contrario, siga [Requisitos previos de instalación del software](producersdk-cpp-rpi-software.md) este procedimiento para asegurarse de que todos los requisitos previos del software de código abierto estén instalados en el dispositivo de destino.