0

我在 Windows 上并交叉编译 Boost 以在嵌入式 Linux 设备上使用(它是运行某些版本的 Debian 的 TS-7800)。我已经让 Boost 正确编译,但我遇到了内部依赖问题。特别是,当我将 Boost 库移至 TS-7800 时,它们无法找到它们自己的依赖项。

我使用以下命令调用 Boost 编译器:

b2 toolset=gcc-arm target-os=linux threadapi=pthread --build-dir=ts7800 --with-filesystem stage

(我也在使用其他库,但这并不重要。)

b2生成一个可笑的目录结构,因此库最终位于例如ts7800/boost/bin.v2/libs/system/build/gcc-arm/release/target-os-linux/threadapi-pthread/threading-multi/Boost 根目录下。

但是,当我尝试使用时,问题就来了filesystem,这取决于system:当我调用我的可执行文件时filesystem,我得到了

./RegistryService: error while loading shared libraries:ts7800\boost\bin.v2\libs\system\build\gcc-arm\release\target-os-linux\threadapi-pthread\threading-multi\libboost_system-gcc-mt-1_53.so.1.53.0: cannot open shared object file: No such file or directory

当我打电话时readelf -d libboost_filesystem-gcc-mt-1_53.so,我得到

 Tag        Type          Name/Value
0x00000001  (NEEDED)     Shared library: [ts7800\boost\bin.v2\libs\system\build\gcc-arm\release\target-os-linux\threadapi-pthread\threading-multi\libboost_system-gcc-mt-1_53.so.1.53.0]

有什么方法可以强制 Boost 不将整个路径链接到库中吗?通过展平目录结构或之后更改它们?

或者,有没有办法让 Linux 识别该目录路径?我尝试将整个结构复制到我的可执行文件和 的目录中libboost_filesystem-gcc-mt-1_53.so,并将目录的位置添加到 LD_LIBRARY_PATH,但这些努力似乎都没有奏效。(不过,我对这条路线有点怀疑,因为路径中有反斜杠。)

谢谢您的帮助!

4

0 回答 0