转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2657

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 function functional/hash integer interprocess lexical_cast lockfree mem_fn move mpl operators optional random ref signals2 smart_ptr static_assert tokenizer tuple type_traits typeof unordered utility build .\boost_slim

这条命令就把所有KlayGE需要用到的boost子库都放到boost_slim目录下。注意也需要包含build,否则bjam也会被砍掉。这么一来,boost目录就剩下38.5M!bcp是根据分析源代码中的#include来确定依赖关系的,所以并不会砍掉要用的,但有可能保留个别不需要用的。编译测试的结果表明,KlayGE没有受任何影响。但要注意的是,bcp仍会在libs目录下保留很多文档和例子,最好也能手工删除。

利用bcp,boost的大小可以减少非常多。希望这对遇到这个情况的朋友有所帮助。