0

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

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

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

Dynamic Section:
   NEEDED               bin.v2\libs\timer\build\qcc\release\target-os-qnx\threadapi-pthread\threading-multi\libboost_timer-qcc-mt-1_60.so.1.60.0
   NEEDED               bin.v2\libs\system\build\qcc\release\target-os-qnx\threadapi-pthread\threading-multi\libboost_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 工具链问题?我真的不想手动编辑每个库的二进制文件......

4

1 回答 1

0

直接控制这个的属性叫做hardcode-dll-paths,默认为true,方便开发时使用。“安装”元目标明确将其更改为 false,因此您要安装的二进制文件不会引用构建树。听起来您使用的构建过程不使用任何一个installstage目标?

于 2016-05-26T15:31:20.197 回答