공유 라이브러리 로드 오류: libboost_system.so.1.55.0: 공유 개체 파일을 열 수 없습니다. 해당 파일 또는 디렉터리가 없습니다.

공유 라이브러리 로드 오류: libboost_system.so.1.55.0: 공유 개체 파일을 열 수 없습니다. 해당 파일 또는 디렉터리가 없습니다.

여기에 이미지 설명을 입력하세요. 여기에 이미지 설명을 입력하세요. 여기에 이미지 설명을 입력하세요.

Raspberry 2에서 실행되도록 2016년에 작성된 소프트웨어를 Raspberry 5로 이전하고 싶습니다. 이 마이그레이션 중에 모든 파일을 RP5에 복사했습니다. 그런데 RP5에서 실행하면 localhost를 통해 스크린샷을 찍어도 "gateway"라는 파일을 실행할 수 없기 때문에 다른 코드가 작동하지 않습니다. 게이트웨이 파일은 실행 파일입니다. 아래 그림과 같이 게이트웨이에 필요한 라이브러리가 작성되었습니다. 현재 겪고 있는 문제는 RP5에 libboost_system.so.1.55.0이라는 라이브러리를 설치하고 싶다는 것입니다. 사진에서 볼 수 있듯이 설치했는데 게이트웨이 폴더를 실행하려고 하면 여전히 같은 라이브러리 오류가 발생합니다. 제가 설치부분을 잘못한걸까요? 위치 경로 오류가 발생했나요? 이 문제를 해결하는 데 도움을 주실 수 있나요? 어떤 길을 택해야 합니까?

pi@raspberrypi:~/eos-gateway $ file gateway
gateway: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=5d922572a7f8a45905671e08c5221ec4a1f9ee4f, with debug_info, not stripped
pi@raspberrypi:~/eos-gateway $ readelf -d gateway

Dynamic section at offset 0x1af188 contains 35 entries:
  Tag        Type                          Name/Value
 0x00000001 (NEEDED)                     Shared library: [libcaf_io.so.0.14.0]
 0x00000001 (NEEDED)                     Shared library: [libcaf_core.so.0.14.0]
 0x00000001 (NEEDED)                     Shared library: [librf24-bcm.so.1]
 0x00000001 (NEEDED)                     Shared library: [libmysqlcppconn.so.7]
 0x00000001 (NEEDED)                     Shared library: [libboost_system.so.1.55.0]
 0x00000001 (NEEDED)                     Shared library: [libcrypto.so.1.0.0]
 0x00000001 (NEEDED)                     Shared library: [libstdc++.so.6]
 0x00000001 (NEEDED)                     Shared library: [libm.so.6]
 0x00000001 (NEEDED)                     Shared library: [libgcc_s.so.1]
 0x00000001 (NEEDED)                     Shared library: [libpthread.so.0]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
 0x0000000f (RPATH)                      Library rpath: [/usr/local/lib]
 0x0000000c (INIT)                       0x24358
 0x0000000d (FINI)                       0x178d80
 0x00000019 (INIT_ARRAY)                 0x1cf12c
 0x0000001b (INIT_ARRAYSZ)               84 (bytes)
 0x0000001a (FINI_ARRAY)                 0x1cf180
 0x0000001c (FINI_ARRAYSZ)               4 (bytes)
 0x6ffffef5 (GNU_HASH)                   0x10194
 0x00000005 (STRTAB)                     0x14f64
 0x00000006 (SYMTAB)                     0x11ac4
 0x0000000a (STRSZ)                      57104 (bytes)
 0x0000000b (SYMENT)                     16 (bytes)
 0x00000015 (DEBUG)                      0x0
 0x00000003 (PLTGOT)                     0x1cf2c8
 0x00000002 (PLTRELSZ)                   2880 (bytes)
 0x00000014 (PLTREL)                     REL
 0x00000017 (JMPREL)                     0x23818
 0x00000011 (REL)                        0x236b8
 0x00000012 (RELSZ)                      352 (bytes)
 0x00000013 (RELENT)                     8 (bytes)
 0x6ffffffe (VERNEED)                    0x23508
 0x6fffffff (VERNEEDNUM)                 6
 0x6ffffff0 (VERSYM)                     0x22e74
 0x00000000 (NULL)                       0x0
pi@raspberrypi:~/eos-gateway $ sudo ./gateway
./gateway: error while loading shared libraries: libboost_system.so.1.55.0: cannot open shared object file: No such file or directory
pi@raspberrypi:~/eos-gateway $

sudo apt-get install libboost1.55*를 사용하여 라이브러리를 설치했습니다. 이번 설치에서는 usr/local/lib 위치에도 설치했습니다. 하지만 여전히 libboost1.55 오류가 발생합니다. 위치 오류나 설치 오류가 발생한 것 같은데 확인하는 방법을 모르겠습니다.

답변1

Raspberry 2에서 실행되도록 2016년에 작성된 소프트웨어를 Raspberry 5로 이전하고 싶습니다. 이 마이그레이션 중에 모든 파일을 RP5에 복사했습니다.

알다시피, 32비트 종속성의 정확한 ABI 호환 버전이 필요합니다. (귀하의 OS는 RPi5에서 64비트가 되기를 바랄 수도 있습니다. 그렇지 않으면 RAM의 절반에 액세스할 수 없습니다. 그리고 많은 성능), libboost-system 외에도 libcrypto 및 libmysqlcppcon이 있습니다.

훌륭해아니요시스템에 libboost를 설치하십시오. 소스 tarball을 어딘가에 복사하고 압축을 풀면 됩니다. 이것은 Boost의 ABI 호환 버전이 아닙니다.

sudo apt-get install libboost1.55*를 사용하여 라이브러리를 설치했습니다.

그것은 아무것도 설치해서는 안 됩니다. 현재 데비안은 부스트 ​​1.55와 함께 제공되지 않습니다.

달성해야 할 것은 "게이트웨이" 소프트웨어에서 사용하는 라이브러리가 운영 체제와 함께 제공되는 상황입니다.

예를 들어 컨테이너에서 "오래된" 데비안을 실행하고 해당 컨테이너에 시스템의 어느 부분을 노출해야 하는지 파악하거나, 연결하려는 라이브러리가 실제로 필요하다는 것을 암시하는 것 같습니다. 최신 라이브러리를 사용하도록 소프트웨어를 다시 구축합니다. 링크한 라이브러리 중 하나의 이름에 이 항목이 있다는 사실 은 -bcm아마도 해당 라이브러리의 새 버전이 필요하다는 것을 의미할 것입니다. 이는 일반적으로 RPi 비즈니스의 CPU 공급 장치인 "broadcom"의 약어이기 때문입니다. 기존 RPi에 비해 많이 바뀌었습니다.

이 경우 재구축이 더 쉬울 수 있습니다. gateway사용 중인 librf24-bcm은 GPL2 라이브러리입니다. 즉, 소스 코드에 관계없이 gateway소프트웨어를 재구축하는 데 필요한 소스 코드와 모든 스크립트에 액세스할 수 있어야 합니다. 그 당시 게이트웨이 소프트웨어를 어떻게 구축했는지는 모르겠지만 그 정보는 여전히 이전 RPi 이미지에 있을 것입니다.

관련 정보