我可以使用以下命令成功交叉编译针对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工具链问题?我真的不想手动编辑每个库的二进制文件......
答案 0 :(得分:0)
直接控制它的属性称为hardcode-dll-paths
,默认情况下为true,以便在开发过程中更方便。 'install'metatarget明确地将其更改为false,因此您指定安装的二进制文件不会引用构建树。听起来您使用的构建过程没有使用install
或stage
目标吗?