

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 解决适用于 Raspberry Pi 的 C\+\+ 制作器 SDK
<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]'
```

在此示例中，它正在尝试构建 64 位版本 (`linux-aarch64`)，而这个 Raspberry Pi 实际上是 32 位。某些 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
```

验证您的系统架构：
+ 查看内核位数：运行 `uname -m`
+ 查看用户空间位数：运行 `getconf LONG_BIT`

您也可以使用`cat /proc/cpuinfo`或`lscpu`命令查看您的 CPU 信息。

**解决方法：**

要解决此问题，请在构建时添加以下 CMake 参数，以确保 OpenSSL 正确构建 32 位 ARM 架构：

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

## 对中的`kvssink`加载问题进行故障排除 GStreamer
<a name="troubleshoot-rpi-kvssink"></a>

确认 `GST_PLUGIN_PATH`

确保当前 shell 会话中的`GST_PLUGIN_PATH`环境变量指向包含的目录`kvssink`。环境变量是特定于会话的，因此您需要为每个新会话设置它们。要使此更改永久化，请参阅 “更新外壳程序的启动脚本以包括设置 GST\_PLUGIN\_PATH 环境变量”。

**错误：无法打开共享目标文件：没有这样的文件或目录**

如果遇到错误`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
```

**重要**  
环境变量是特定于会话的。要在会话之间保留更改，请修改 shell 的启动脚本。

您可能还需要将添加`open-source/local/lib`到`$LD_LIBRARY_PATH`。

**错误：。 /path/to/libcproducer.so.1: ELF 标头无效**

如果您在加载**共享库**时收到此错误，则可能是由于符号链接损坏 (`symlinks`) 所致。如果主机的操作系统与目标计算机的操作系统不匹配，符号链接可能会中断。例如，在 Raspberry Pi 上 MacBook进行交叉编译。

另一个可能的原因是构建的二进制文件用于错误的架构。例如，如果二进制文件是为 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`未损坏。Bro `symlinks` ken 不会有箭指向目标。

**解决方法：**

修复符号链接有两个选项：
+ **推荐：**`symlink`使用`ln`命令重新创建。类型：

  ```
  ln -s /path/to/actual/library /path/to/symlink
  ```
+ 复制实际的库文件并对其进行重命名以匹配`symlink`。
**注意**  
此选项会增加存储使用量。

最佳做法是，使用像 Docker 这样的工具在同一个操作系统上进行编译，以避免交叉编译问题。

**缺少依赖关系：**

如果缺少的库名称以开头`libkvs`，请参阅上面的 “已移动库” 部分，将 Kinesis Video Streams 库从主机设备安装到目标设备。

否则，[安装软件先决条件](producersdk-cpp-rpi-software.md)请按照以下步骤操作，确保目标设备上已安装所有开源软件先决条件。