C++ Sun C++;编译器和Boost

C++ Sun C++;编译器和Boost,c++,boost,boost-mpl,opensolaris,suncc,C++,Boost,Boost Mpl,Opensolaris,Suncc,我目前正在OpenSolaris 2009-06上开发。MPL文档似乎表明sun编译器是可靠的(该文档最后一次更新是在2004年)。Boost的顶级文档似乎建议支持sun compilers 5.10及以上版本——我想这是一个一般级别的支持,还是包括MPL?。是否有任何关于Sun 5.10编译器的C++一致性状态的详细信息? 我总是可以使用GCC进行编译。我在solaris10上使用Boost和Sun的CC编译器取得了一些成功,但这是一件痛苦的事情。要记住的主要事情是你需要 -library=

我目前正在OpenSolaris 2009-06上开发。MPL文档似乎表明sun编译器是可靠的(该文档最后一次更新是在2004年)。Boost的顶级文档似乎建议支持sun compilers 5.10及以上版本——我想这是一个一般级别的支持,还是包括MPL?。是否有任何关于Sun 5.10编译器的C++一致性状态的详细信息?
我总是可以使用GCC进行编译。

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

 -library=stlport4 -features=tmplife -features=tmplrefstatic
在您的CXXFLAGS中,对于您编译的所有内容,我尝试过的所有纯模板库似乎都可以很好地使用它(跳过所有需要编译的库,)

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

可悲的是,这是不使用Boost的唯一(微不足道的)有效理由:-(


过去我自己也经历过这个问题,这是一个后遗症

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


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

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


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

boost::mpl似乎有一组广泛的单元测试,您可以尝试在您的compi下运行它们ler.这应该给你最新的支持状态,不管有什么文档。liori说了什么,但是如果你想确保你的环境按预期工作,你就没有什么可以比较的了。你应该找到一些关于预期内容的文档,然后运行单元测试,看看它们是否符合预期感谢各位,我已经用MPL库做了一些原型设计,它们似乎工作得很好(我尝试了几个构造)然而,代码最终看起来很糟糕。所以我想我可能会使用生成的编程,可能使用Lua,用C++来瞄准STL,可能是简单的Boost库。编译实际上不是问题,尤其是1.41,因为他们已经修复了使用STLPORT4的构建脚本。问题是T的特定特性。安置元编程结构。如果你有数百万行用旧stl构建的遗留代码,你必须链接到这些代码,这是一个问题!也就是说,有些包确实使用默认的编译器设置,例如Boost::Tokenizer。@Chris:当你没有访问权限时,用旧stl编译的库的二进制文件如何o源代码?这太令人沮丧了!两个词:遗留代码。有很多东西是用旧版本的Sun STL编译的,你不能链接用Sun STL和STLPort编译的库。(我试过了。)有些库只能用旧版本的Sun STL编译(包括大约三年前我非常想使用的一个Oracle库),如果你打算使用它们,你将使用旧的破损STL。是的,我发现这非常令人沮丧。啊,非常好的一点。考虑到我自己的经验,我应该想到这一点。