Skip to content

Archive

Tag: boost
不久以前,KlayGE附带的boost破例升级到了1.56.0。随着boost的开发进度重回正轨,1.57又如期发布了。所以KlayGE第三方库的boost再次回到传统的只更新单数版本的规则。 在boost 1.57之前,any用的是C++原生的typeid,在使用的时候必须打开编译器的RTTI。于是我提交了一个补丁,让any使用Boost.Core中的一个替代typeinfo。由于现在有了更完善的Boost.TypeIndex,any可以直接使用它。这样就能在不打开RTTI的情况下使用any。再加上1.57更好地兼容了WinRT和Android,原先很多修改变得不必要了。这么一来,要在KlayGE支持的所有平台上都使用boost,需要修改的地方前所未有地少了。 接下去我还打算把Boost.SmartPtr等地方用到typeid的也都改成 ...
传统上,KlayGE集成的是单数版本的boost。但这次1.56的开发周期实在太长了,原定2月份出来的,足足延期了6个月。原因应该是他们在往git上迁移,并且在做模块化的重构。现在每个boost库的头文件、源文件和帮助文件都在一个单独的git库里,通过submodule的方式加到boostorg这个上层git库中。 还好,对使用boost来说,差别不大,照样可以永远原先的方法编译和使用。所以和升级Python不同的是,把boost升级到1.56.0没有遭遇太大的麻烦。 补丁 在之前的版本里,为了在WinRT和Android上使用boost,需要打很多补丁,修改很多地方才行。这些修改在这几个版本的boost里被逐渐集成进去,所以补丁的数量减少了很多。尤其是,微软的OpenTech团队直接 ...
boost 1.55.0前两天发布了。长期以来KlayGE中集成的boost源代码是用的都奇数版本号的boost,上一个是1.53,所以这次1.55也要集成进来。 除了用bcp缩减boost的大小之外,由于boost在开发的时候没有考虑WinRT和Android这样的平台,所以每次集成后都需要做一些修改才能让boost通过所有的编译。纵观这次的1.55.0,需要修改的地方比以往的都少得多了。主要原因来自几方面: KlayGE从4.3开始引入C++11。原先需要修改的一些库,比如Chrono、Thread、SmartPtr,都因为不再使用boost的实现而没有去修改。 bjam和Config已经支持vc12,所以不需要自己打补丁。 Endian改用新增的Predef库,已经支持Android和ARM。 Boost.Filesystem已经支持A ...
KlayGE的源代码包里带了包括boost在内的所有第三方库。如果使用完整版的boost,那么大小会吃不消的。因为只用了boost中很少的一部分(列表在这里),以前用的方法是手工删掉了libs和tools等目录下所有不使用子目录,以及帮助文件和例子。通过这样的缩减,已经让boost从356M减少到了96.8M。但是,头文件的目录仍不容易直接删减,因为互相依赖很大。 上周空明流转大牛说他在SALVIA里也遇到了类似的问题,打算用boost自带的bcp工具处理一下。所以我也做了一下测试,用bcp来砍掉所有不用的库: bcp atomic chrono filesystem program_options regex system thread algorithm any array assert assign bind circular_buffer container foreach ...
上次对各编译器对C++11的支持比较之后,很多观众提议加入Intel C++ Compiler(ICC)和Clang。这次修订还加入了在VC11 Nov 12 CTP中对C++11的提升。上回表中的Yes/No标识也被我改成了写明支持一个feature的最低版本号,feature的顺序也调整了一下。为了方便查询,还加入了Proposal的链接。 C++11 Core Language Features Language Feature Proposal MSVC GCC ICC Clang 替代方案 Rvalue references N2118 10.0 4.3 12.0 2.9 Boost.Move     Rvalue references for *this N2439 No No No 2.9 Initialization of class objects by rvalues N1610 9.0 4.3 11.1 2.9 Non-static data membe ...
在KlayGE首次引入C++11特性之后,我顺便调研了一下个主流编译器对C++11的支持度,以便在下个版本中加入更多的C++11元素。这里还列出了在不支持的时候,可以采用的替代方案。主要参考了C++11 Features in Visual C++ 11,Status of Experimental C++0x Support in GCC 4.6,Status of Experimental C++0x Support in GCC 4.7,Boost。 C++11 Core Language Features   VC 10 VC 11 GCC 4.6 GCC 4.7 替代方案 Rvalue references Yes Yes Yes Yes Boost.Move Rvalue references for *this No No No No Non-static data member initializers No No No Yes Variadic templates No No Yes Y ...
[zh] 在PC上的C++开发中,boost已经很普遍。但对于Android这样的移动平台呢?由于KlayGE正在移植Android,作为依赖库之一的boost也必须移植过去。官方的boost并没有提供Android支持,看来得自己做了。 受MysticTreeGames的Boost-for-Android启发,我想用最新的Crystax NDK来编译boost 1.47。 准备工作 需要下载 boost 1.47 Crystax's NDK r6 MysticTreeGames的Boost-for-Android 补丁 首先,MysticTreeGames的补丁是基于boost 1.45和官方的NDK r5,在最新版上不一定能完美运作。因为有些源文件在1.45到1.47的过程中更改了,无法自动打上补丁。所以我手工地在原始的boost 1.47上根据补丁进行修改。其实不太难,因为只有12 ...