我想将 2016 年编写的在 Raspberry 2 上运行的软件转移到 Raspberry 5。在这个迁移过程中,我将所有文件复制到 RP5。然而,当我在 RP5 上运行它时,我的其他代码不起作用,因为我无法运行名为“gateway”的文件,即使我通过 localhost 进行了屏幕截图。该网关文件是可执行文件。如下图所示,网关所需的库已经编写完成。我当前遇到的问题是我想在我的 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
我想将 2016 年编写的在 Raspberry 2 上运行的软件转移到 Raspberry 5。在这个迁移过程中,我将所有文件复制到 RP5。
那是行不通的;正如您所注意到的,您需要 32 位依赖项的确切 ABI 兼容版本(您的操作系统可能/希望在 RPi5 上是 64 位,否则您将无法访问一半的 RAM 和大量性能),还有更多除了 libboost-system 之外,还有 libcrypto 和 libmysqlcppcon。
你做到了不是安装 libboost 系统;您只是将源 tarball 复制到某处,然后将其解压。这不是 ABI 兼容的 boost 版本。
我使用 sudo apt-get install libboost1.55* 安装了该库。
那应该没有安装任何东西;当前的 Debian 不提供 boost 1.55。
您需要实现的是这样一种情况:您的“网关”软件使用的库是您的操作系统带来的库。
这可以通过在容器中运行“旧”debian 来完成,例如在容器中并找出需要向该容器公开系统的哪些部分,或者,这似乎表明,考虑到您要链接的库,您真的需要重新构建您的软件才能使用现代库。请注意,您链接的库之一的-bcm
名称中包含这一事实可能意味着您无论如何都需要该库的新版本,因为它通常是“broadcom”的缩写,它是您的 RPi 上的 CPU 的供应商,并且与旧的 RPi 相比,已经发生了很大的变化。
在这种情况下,重建可能更容易:您gateway
使用的 librf24-bcm 是一个 GPL2 库,这意味着无论您来自何处gateway
,您都应该有权访问重建该软件所需的源代码和所有脚本。我不知道您当时是如何构建该网关软件的,但我敢打赌该信息仍然位于您旧的 RPi 映像上!