交叉编译助推 1.60.0 内部依赖问题

Cross-compiling boost 1.60.0 internal dependency issue

本文关键字:内部 依赖 问题 交叉编译      更新时间:2023-10-16

我可以使用以下命令在针对 QNX OS (x86) 的 Windows 上成功交叉编译 boost:b2 toolset=qcc target-os=qnx threadapi=pthread

但是,由于某种原因,生成的库文件似乎没有正确链接到内部依赖项。

例如,在单元测试框架上执行 objdump 会导致:

Dynamic Section:
   NEEDED               bin.v2libstimerbuildqccreleasetarget-os-qnxthreadapi-pthreadthreading-multilibboost_timer-qcc-mt-1_60.so.1.60.0
   NEEDED               bin.v2libssystembuildqccreleasetarget-os-qnxthreadapi-pthreadthreading-multilibboost_system-qcc-mt-1_60.so.1.60.0
   NEEDED               libm.so.2
   NEEDED               libc.so.3

如您所见,有一个荒谬的路径可以链接到计时器和系统库(QNX 和 linux 一样,将"\"解释为转义字符,所以我不能在 QNX 机器中使用文件夹结构)。我已经手动编辑了库的二进制文件并删除了路径(我知道这是非常危险的......

Dynamic Section:
   NEEDED               libboost_timer-qcc-mt-1_60.so.1.60.0
   NEEDED               libboost_system-qcc-mt-1_60.so.1.60.0
   NEEDED               libm.so.2
   NEEDED               libc.so.3

哪个有效。是否可以强制 Boost 不包含整个路径到库中?这是提升问题还是 QNX 6.6 QCC 工具链问题?我真的不想手动编辑每个库的二进制文件......

直接控制它的属性称为 hardcode-dll-paths ,默认情况下为 true,以便在开发过程中更方便。"install"元目标明确将其更改为 false,因此您用于安装的二进制文件不引用构建树。听起来您使用的构建过程既不使用install目标,也没有使用stage目标?