Sun C++ 编译器和 Boost

Posted

技术标签:

【中文标题】Sun C++ 编译器和 Boost【英文标题】:Sun C++ Compilers and Boost 【发布时间】:2009-11-29 21:09:32 【问题描述】:

我目前正在 OpenSolaris 2009-06 上进行开发。 Boost::MPL 文档似乎表明 sun 编译器是 not supported(该文档最后更新于 2004 年)。 Boost 的***文档似乎表明支持 sun 编译器 5.10 及更高版本——我想这是一般级别的支持,还是包括 MPL?有没有人有关于 sun 5.10 编译器的 C++ 一致性状态的详细信息?

我总是可以使用 GCC 进行编译。

【问题讨论】:

Boost::MPL 似乎有大量的单元测试,您可以尝试在您的编译器下运行它们。这应该为您提供最新的支持状态,无论任何文档。 liori 所说的,但如果您希望确保您的环境按预期工作,那么您将没有什么可比较的。您应该找到一些有关预期内容的文档,然后还运行单元测试并查看它们是否是文档所预测的。 谢谢大家,我已经使用 MPL 库进行了一些原型设计,它们似乎工作正常(使用我尝试的少数构造)。然而,代码最终看起来很讨厌。所以我想我会进入生成式编程,可能会使用 Lua,并使用 STL 和简单的 BOOST 库来定位 C++。 【参考方案1】:

我在 Solaris 10 上使用 Boost 和 Sun 的 CC 编译器取得了一些成功,但这很痛苦。要记住的主要事情是你需要,

 -library=stlport4 -features=tmplife -features=tmplrefstatic

在您编译的所有内容中,CXXFLAGS 中,我尝试过的所有仅模板库似乎都可以正常工作,(跳过所有需要编译的库,see here for details)

当然,这确实意味着您必须重新构建您需要链接到的任何库(如果他们已经使用了 stlport4,您将非常幸运)。

遗憾的是,这是不使用 Boost 的唯一(微不足道的)正当理由 :-(

Sun C++ Frontend tails blog

【讨论】:

编译并不是真正的问题,尤其是在 1.41 中,因为他们已修复构建脚本以使用 stlport4。问题在于模板元编程结构的特殊性。 如果您有数百万行使用旧 stl 构建的遗留代码,您必须链接到这些代码,这是一个问题!也就是说,一些包确实可以使用默认编译器设置,例如 Boost::Tokenizer。 @Chris:当您无法访问源代码时,使用旧 stl 编译的库的二进制文件怎么样?现在这令人沮丧!【参考方案2】:

我自己过去也曾解决过这个问题,而且很痛苦。

要更具体地了解 Chris Huang-Leaver 的回答,您确实需要在 Sun 编译器上使用 STLPort4。 Sun 提供的默认 STL 是不完整的,根据他们自己的文档(我会在某个时候追踪它)。 Chris 提到的其他选项很有帮助,但它们并不是问题的真正根源。

好消息是 Sun 提供了 STLPort 版本 4 及其编译器,因此您只需包含“-library=stlport4”标志即可切换到它。为什么他们提供 STL 的两个版本(一个半损坏),而不仅仅是一个正确版本,我无法理解。

【讨论】:

两个字:遗留代码。有很多东西是用旧版本的 Sun STL 编译的,你不能链接用 Sun STL 和 STLPort 编译的库。 (我试过了。)有些库只能用旧的 Sun STL 编译(包括我大约三年前真正想使用的 Oracle 库),如果你要使用它们,你将使用老破的STL。是的,我发现这非常令人沮丧。 啊,很好的观点。鉴于我自己的经历,我应该想到这一点。【参考方案3】:

我想由于没有提供确切的答案,我必须自己发布一个。

opensolaris(2009.06) 和 boost-1.4.1 似乎运行良好。 ./bjam 选择了正确的开关,boost::mpl 似乎与现有的 sun 编译器配合得很好。所以,据我所知,关于编译器支持的 mpl 文档已经过时了。

【讨论】:

以上是关于Sun C++ 编译器和 Boost的主要内容,如果未能解决你的问题,请参考以下文章

为 Sony NMOS 实现编译 C++ boost 库

Linux C++ 将 Boost 编译到我的程序中

为啥我的由 boost.python 和 c++ 头文件编译的 .so 文件失败了?

使用 boost 数据结构和 nghttp2 的 C++ 程序未编译

使用带有 Clang 的 Boost 编译 c++ 项目时出现问题

VS2015编译boost1.62