

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

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

시스템의 아키텍처를 확인합니다.
+ 커널 비트 상태 검토: 실행 `uname -m`
+ 사용자 공간 비트 상태 검토: 실행 `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`. 호스트 시스템의 운영 체제가 대상 시스템의 운영 체제와 일치하지 않으면 Symlink가 중단될 수 있습니다. 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`는 손상되지 않습니다. 손상된 `symlinks` 에는 대상을 가리키는 화살표가 없습니다.

**​해결 방법:**

심볼 링크를 수정하는 두 가지 옵션이 있습니다.
+ **권장 사항:** `ln` 명령을 `symlink` 사용하여를 다시 생성합니다. 유형: 

  ```
  ln -s /path/to/actual/library /path/to/symlink
  ```
+ 실제 라이브러리 파일을 복사하고와 일치하도록 이름을 바꿉니다`symlink`.
**참고**  
이 옵션을 사용하면 스토리지 사용량이 증가합니다.

교차 컴파일 문제를 방지하려면 Docker와 같은 도구를 사용하여 동일한 운영 체제에서 컴파일하는 것이 가장 좋습니다.

**누락된 종속성:**

누락된 라이브러리 이름이 로 시작하는 경우 위의 "이동된 라이브러리" 섹션을 `libkvs`참조하여 호스트 디바이스에서 대상 디바이스로 Kinesis Video Streams 라이브러리를 설치합니다.

그렇지 않으면 [소프트웨어 사전 조건 설치](producersdk-cpp-rpi-software.md)에 따라 모든 오픈 소스 소프트웨어 사전 조건이 대상 디바이스에 설치되어 있는지 확인합니다.