我在 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,但这些努力似乎都没有奏效。(不过,我对这条路线有点怀疑,因为路径中有反斜杠。)
谢谢您的帮助!