

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Memecahkan masalah build pada SDK produsen C\+\+ untuk Raspberry Pi
<a name="troubleshoot-rpi"></a>

Jika Anda mengalami masalah build dan ingin mencoba argumen CMake yang berbeda, pastikan untuk melakukan build yang bersih. Hapus `build` folder `open-source``dependency`,, dan sebelum Anda mencoba lagi.

## Membangun masalah dengan OpenSSL
<a name="troubleshoot-rpi-build"></a>

Jika Anda menerima output yang mirip dengan berikut ini, ini menunjukkan bahwa OpenSSL salah mendeteksi arsitektur sistem Anda.

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

Dalam contoh ini, ia mencoba untuk membangun versi 64-bit (`linux-aarch64`) ketika Raspberry Pi ini sebenarnya 32-bit. Beberapa perangkat Raspberry Pi memiliki kernel 64-bit, tetapi ruang pengguna 32-bit.

Tentukan arsitektur yang coba dibangun OpenSSL. Anda dapat menemukan baris log selama `configure` langkah untuk 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
```

Verifikasi arsitektur sistem Anda:
+ Tinjau bit-ness kernel: run `uname -m`
+ Tinjau bit-ness ruang pengguna: run `getconf LONG_BIT`

Anda juga dapat meninjau informasi CPU Anda dengan `lscpu` perintah `cat /proc/cpuinfo` atau. 

**Resolusi: **

Untuk mengatasi masalah ini, tambahkan argumen CMake berikut saat membangun, untuk memastikan OpenSSL dibangun dengan benar untuk arsitektur ARM 32-bit:

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

## Memecahkan masalah `pemuatan` kvssink di GStreamer
<a name="troubleshoot-rpi-kvssink"></a>

Konfirmasikan `GST_PLUGIN_PATH`

Pastikan variabel `GST_PLUGIN_PATH` lingkungan dalam sesi shell Anda saat ini menunjuk ke direktori yang berisi`kvssink`. Variabel lingkungan bersifat khusus sesi, jadi Anda harus mengaturnya untuk setiap sesi baru. Untuk membuat perubahan ini permanen, lihat “Perbarui skrip awal shell Anda untuk menyertakan pengaturan variabel lingkungan GST\_PLUGIN\_PATH”. 

**Kesalahan: Tidak dapat membuka file objek bersama: Tidak ada file atau direktori seperti itu **

Jika Anda mengalami kesalahan`Cannot open shared object file: No such file or directory`, jalankan perintah berikut:

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

Jika Anda menerima output berikut, ini menunjukkan bahwa linker dinamis tidak dapat menemukan pustaka yang diperlukan untuk`kvssink`. Hal ini biasanya terjadi karena:
+ P `kvssink` indah ke lokasi yang berbeda dari tempat ia dibangun.
+ Cross-compiling untuk arsitektur CPU yang salah.
+ Ketergantungan yang diperlukan tidak ada.

**Output:**

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

**Resolusi: **

Untuk perpustakaan yang ** dipindahkan**, tambahkan direktori yang berisi pustaka yang hilang ke`LD_LIBRARY_PATH`.

Dari direktori root repositori asli, Anda dapat menemukan perpustakaan yang hilang menggunakan `find` utilitas. Di terminal, ketik: 

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

**Output:**

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

Pemisah jalur file pada perangkat Linux adalah`:`. Perintah di bawah ini menambahkan jalur folder baru ke variabel `LD_LIBRARY_PATH` lingkungan yang ada, mempertahankan nilai sebelumnya. 

Di terminal Anda, ketik:

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

**penting**  
Variabel lingkungan bersifat spesifik sesi. Untuk mempertahankan perubahan di seluruh sesi, ubah skrip startup shell Anda.

Anda mungkin juga perlu menambahkan `open-source/local/lib` ke Anda`$LD_LIBRARY_PATH`.

**Kesalahan:. /path/to/libcproducer.so.1: header ELF tidak valid **

Jika Anda menerima kesalahan ini saat memuat pust ** aka ** bersama, itu mungkin karena tautan simbolik rusak (`symlinks`). Symlink dapat rusak jika sistem operasi mesin host tidak cocok dengan mesin target. Misalnya, kompilasi silang pada a MacBook untuk Raspberry Pi.

Kemungkinan penyebab lain adalah bahwa binari yang dibangun adalah untuk arsitektur yang salah. Misalnya, jika binari dibangun untuk x86 (Raspberry Pi menggunakan CPU ARM).

Arahkan ke lokasi perpustakaan yang ditentukan dalam kesalahan dan ketik: `ls -la` untuk memeriksa perpustakaan`symlinks`.

**Tanggapan: **

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

Pada output sampel di atas, `symlinks` tidak rusak. Rusak `symlinks` tidak akan memiliki panah yang menunjuk ke target mereka.

**Resolusi: **

Ada dua opsi untuk memperbaiki symlink:
+ **Direkom ** endasikan: Buat ulang `symlink` dengan `ln` perintah. Jenis:

  ```
  ln -s /path/to/actual/library /path/to/symlink
  ```
+ Salin file pustaka yang sebenarnya dan ganti namanya agar sesuai dengan`symlink`.
**catatan**  
Opsi ini mengarah pada peningkatan penggunaan penyimpanan. 

Sebagai praktik terbaik, kompilasi pada sistem operasi yang sama menggunakan alat seperti Docker untuk menghindari masalah kompilasi silang. 

**Ketergantungan yang hilang: **

Jika nama pustaka yang hilang dimulai dengan`libkvs`, lihat bagian untuk “pustaka yang dipindahkan” di atas untuk menginstal pustaka Kinesis Video Streams dari perangkat host ke perangkat target. 

Jika tidak, ikuti [Instal prasyarat perangkat lunak](producersdk-cpp-rpi-software.md) untuk memastikan semua prasyarat perangkat lunak sumber terbuka diinstal pada perangkat target.