

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 para productores de C\$1\$1 para Raspberry Pi
<a name="troubleshoot-rpi"></a>

Si tienes un problema con la compilación y quieres probar diferentes CMake argumentos, asegúrate de realizar una compilación limpia. Elimine 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, indica que OpenSSL ha detectado incorrectamente la arquitectura 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]'
```

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 construir OpenSSL. Puedes encontrar la línea de registro durante el `configure` paso para 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 la arquitectura de tu sistema:
+ Revise el nivel de bits del núcleo: ejecute `uname -m`
+ Revise el espacio de usuario bit-ness: run `getconf LONG_BIT`

También puedes revisar la información de la CPU con nuestros comandos`cat /proc/cpuinfo`. `lscpu` 

**Solución**:

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

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

## Solucione problemas de carga `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 la contiene`kvssink`. Las variables de entorno son específicas de cada 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 del shell para incluir la configuración de la variable de entorno GST\$1PLUGIN\$1PATH». 

**Error: no se puede abrir el archivo de objetos compartidos: no existe ese 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 una ubicación diferente de donde se construyó.
+ Compilación cruzada para una arquitectura de CPU incorrecta.
+ Falta una dependencia necesaria.

**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`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 conservar los cambios en todas las sesiones, modifique el script de inicio del shell.

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

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

Si recibe este error al cargar **bibliotecas compartidas**, es posible que se deba a que los enlaces simbólicos están rotos ()`symlinks`. Los enlaces simbólicos pueden romperse 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 Raspberry MacBook Pi.

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

Navegue hasta la ubicación de la biblioteca especificada en el error y escriba: `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. Broken `symlinks` no tendrá flechas apuntando a sus objetivos.

**Solución**:

Hay dos opciones para corregir los enlaces simbólicos:
+ **Recomendado: Vuelva** a crearlo `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 aumenta el 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 anterior sobre «bibliotecas trasladadas» para instalar las bibliotecas de Kinesis Video Streams del dispositivo anfitrión al dispositivo de destino. 

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