

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# C\$1\$1 プロデューサー SDK for Raspberry Pi のビルド問題のトラブルシューティング
<a name="troubleshoot-rpi"></a>

ビルドの問題が発生し、異なる CMake 引数を試す場合は、必ずクリーンビルドを実行してください。再試行する前に`open-source`、、`dependency`、および `build`フォルダを削除します。

## OpenSSL に関する問題をビルドする
<a name="troubleshoot-rpi-build"></a>

次のような出力が表示された場合は、OpenSSL がシステムアーキテクチャを誤って検出したことを示します。

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

この例では、この Raspberry Pi が実際に 32 ビットである場合、64 ビットバージョン (`linux-aarch64`) を構築しようとしています。一部の Raspberry Pi デバイスには 64 ビットカーネルがありますが、32 ビットのユーザースペースがあります。

OpenSSL が構築しようとしているアーキテクチャを決定します。OpenSSL の`configure`ステップ中にログ行を見つけることができます。

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

システムのアーキテクチャを確認します。
+ カーネルビットネスの確認: run `uname -m`
+ ユーザースペースのビットネスを確認する: run `getconf LONG_BIT`

`cat /proc/cpuinfo` または `lscpu` コマンドを使用して CPU 情報を確認することもできます。

**解決策:**

この問題を解決するには、構築時に次の CMake 引数を追加して、OpenSSL が 32 ビット ARM アーキテクチャ用に正しく構築されるようにします。

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

## GStreamer での`kvssink`ロード問題のトラブルシューティング
<a name="troubleshoot-rpi-kvssink"></a>

確認 `GST_PLUGIN_PATH`

現在のシェルセッションの`GST_PLUGIN_PATH`環境変数が を含むディレクトリを指していることを確認します`kvssink`。環境変数はセッション固有であるため、新しいセッションごとに設定する必要があります。この変更を永続的にするには、「GST\$1PLUGIN\$1PATH 環境変数の設定を含めるようにシェルの起動スクリプトを更新します」を参照してください。

**エラー: 共有オブジェクトファイルを開くことができません: そのようなファイルやディレクトリはありません**

エラー が発生した場合は`Cannot open shared object file: No such file or directory`、次のコマンドを実行します。

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

次の出力が表示された場合は、動的リンカーが に必要なライブラリを見つけられないことを示します`kvssink`。これは通常、次の理由で発生します。
+ 構築された場所とは異なる場所`kvssink`に移動する。
+ 間違った CPU アーキテクチャのクロスコンパイル。
+ 必要な依存関係がありません。

**出力:**

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

**解決策:**

**移動したライブラリ**の場合は、欠落しているライブラリを含むディレクトリを に追加します`LD_LIBRARY_PATH`。

元のリポジトリのルートディレクトリから、 `find`ユーティリティを使用して欠落しているライブラリを見つけることができます。ターミナルで、次のように入力します。

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

**出力:**

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

Linux デバイスのファイルパス区切り文字は です`:`。以下のコマンドは、既存の`LD_LIBRARY_PATH`環境変数に新しいフォルダパスを追加し、以前の値を保持します。

ターミナルで、次のように入力します。

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

**重要**  
環境変数はセッション固有です。セッション間で変更を保持するには、シェルの起動スクリプトを変更します。

また、 `open-source/local/lib`を に追加する必要がある場合もあります`$LD_LIBRARY_PATH`。

**エラー: ./path/to/libcproducer.so.1: 無効な ELF ヘッダー**

**共有ライブラリ**のロード中にこのエラーが発生した場合は、シンボリックリンク () が壊れている可能性があります`symlinks`。ホストマシンのオペレーティングシステムがターゲットマシンのオペレーティングシステムと一致しない場合、シンボリックリンクが壊れる可能性があります。例えば、MacBook for a Raspberry Pi でのクロスコンパイルなどです。

もう 1 つの考えられる原因は、構築されたバイナリが間違ったアーキテクチャ用であったことです。たとえば、バイナリが x86 用に構築されている場合 (Raspberry Pi は ARM CPUsを使用します）。

エラーで指定されたライブラリの場所に移動し、 と入力`ls -la`してライブラリを検査します`symlinks`。

**レスポンス**:

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

上記のサンプル出力では、 `symlinks`は壊れていません。壊れ`symlinks`た には、ターゲットを指す矢印はありません。

**解決策:**

シンボリックリンクを修正するには、次の 2 つのオプションがあります。
+ **推奨:** `ln` コマンド`symlink`を使用して を再作成します。タイプ:

  ```
  ln -s /path/to/actual/library /path/to/symlink
  ```
+ 実際のライブラリファイルをコピーし、 と一致するように名前を変更します`symlink`。
**注記**  
このオプションを使用すると、ストレージ使用量が増加します。

ベストプラクティスとして、Docker などのツールを使用して同じオペレーティングシステムでコンパイルし、クロスコンパイルの問題を回避します。

**欠落している依存関係:**

欠落しているライブラリ名が で始まる場合は`libkvs`、上記の「移動したライブラリ」のセクションを参照して、ホストデバイスからターゲットデバイスに Kinesis Video Streams ライブラリをインストールします。

それ以外の場合は、 に従って[ソフトウェアのインストールの前提条件](producersdk-cpp-rpi-software.md)、すべてのオープンソースソフトウェアの前提条件がターゲットデバイスにインストールされていることを確認します。