交叉编译提升1.60.0内部依赖问题

时间:2016-05-26 11:30:59

标签: c++ boost qnx qcc

我可以使用以下命令成功交叉编译针对QNX OS(x86)的Windows上的提升: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一样,将'\'解释为escape-char所以我不能使用文件夹结构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工具链问题?我真的不想手动编辑每个库的二进制文件......

1 个答案:

答案 0 :(得分:0)

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