2009-10-21 75 views
1

我正尝试将一个使用Boost(特别是boost :: thread和boost :: asio)的项目迁移到VxWorks。针对VxWorks交叉编译Boost 1.40

我无法使用vxworks gnu编译器进行编译。我认为这不会是一个问题,因为我看到boost trac上的补丁声称可以实现这一点,而且由于vxworks编译器是gnu工具链的一部分,我应该能够遵循the boost docs用于交叉编译。

我建立在一个ppc vxworks的窗口上。

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

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

我在做什么错?我相信我已经将这些文件记录在了信上。

回答

0

尝试还加入

threadapi=pthread 

你所提到的文件是Boost.Build - 这是独立的构建工具 - 与上面的标志是特定于Boost.Thread库的东西。 “挂”是什么意思?因为Boost库很大,所以在构建之前有时需要花费很多时间来扫描依赖关系。 如果它真的挂起,你可以在调试器中捕获bjam并产生回溯?另外,任何输出的日志都会有所帮助。

2

如果它包含win32头文件而不是pthread头文件,那么编译器定义的宏集合和boost头文件检查的宏可能会有差异。我有一个类似智能指针头的问题,在较旧版本的boost中会检查__ppc,但我的编译器定义了__ppc__(反之亦然,不记得)。

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

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

我从来没有试过为VxWorks编译boost,因为我只需要一些头文件。