1

我正在尝试将使用 Boost(特别是 boost::thread 和 boost::asio)的项目迁移到 VxWorks。

我无法使用 vxworks gnu 编译器进行编译。我认为这不会成为问题,因为我在 boost trac 上看到了声称使这成为可能的补丁,并且由于 vxworks 编译器是 gnu 工具链的一部分,我应该能够按照说明进行操作用于交叉编译的 boost 文档。

我正在为 ppc vxworks 在 Windows 上构建。

我更改了 boost 文档中指定的 user-config.jam 文件,并将 target-os=linux 选项用于 bjam,但 bjam 在编译之前似乎挂起。仔细检查 bjam 发出的命令(通过使用 -n 选项调用它)发现它正在尝试使用 boost::thread 的 win32 文件进行编译。这不可能,因为 vxworks 使用 pthreads。

我的 bjam 命令:.\bjam --with-thread toolset=gcc-ppc target-os=linuxgcc-ppc 在用户配置中设置为指向 g++ppc vxworks 交叉编译器。

我究竟做错了什么?我相信我已经完全按照文档进行了操作。

4

2 回答 2

2

如果它是#include win32 标头而不是 pthread 标头,则编译器定义的宏集与 boost 标头正在检查的宏之间可能存在差异。我在使用智能指针头时遇到了类似的问题,在旧版本的 boost 中会检查它,__ppc但我的编译器已定义__ppc__(反之亦然,不记得了)。

touch empty.cpp
ccppc -dD -E empty.cpp

这将显示您的编译器预定义了哪些宏。

我从未尝试为 VxWorks 编译 boost,因为我只需要一些头文件。

于 2009-12-05T21:10:27.607 回答
0

尝试也添加

threadapi=pthread

您提到的文档是针对 Boost.Build 的——它是独立的构建工具——上面的标志是 Boost.Thread 库特有的。“挂”是什么意思?由于 Boost 库非常庞大,因此有时在构建之前扫描依赖项需要花费大量时间。如果它真的挂起,你能在调试器中捕获 bjam 并产生回溯吗?此外,任何输出的日志都会有所帮助。

于 2009-10-25T09:27:06.840 回答