在Mingw中使用预编译头文件的Odeint失败

时间:2015-06-18 00:21:41

标签: boost mingw32 precompiled-headers odeint

当我在预编译的头文件中包含<boost/numeric/odeint/integrate/integrate.hpp>并使用Mingw4.9.2-32bit(来自Qt 5.4)编译时,我无法编译我的项目。预编译文件大约200 MB(巨大!)。我从编译器得到的错误信息是

Makefile.Debug:1698: recipe for target 'debug/main.o' failed
mingw32-make[1]: *** [debug/main.o] Error 1

从这个相关的问题 PRECOMPILED HEADERS not working in debug build with Qt Creator / qmake / MinGw 我知道编译失败的原因是因为文件很大。但!为什么这个文件太大了?有没有办法减少编译的头文件大小?

当我使用MSVC 2013编译代码时,我没有遇到此问题,预编译的头文件大约为40 MB(合理)。当我使用clang在MacOS 10.10中编译时,我也没有遇到这个问题。

从本质上讲,我尝试做的是在使用Odeint时加快编译时间。如果还有其他方式,请告诉我。

这是我的预编译标题的样子

// pre compiled header
#ifndef PCH_H
#define PCH_H

//-----------------------------------------------
// Add C includes here


//-----------------------------------------------
// Add C++ includes here

#ifdef __cplusplus

#include <boost/array.hpp>
#include <boost/numeric/odeint/integrate/integrate.hpp>
using namespace boost::numeric::odeint;

#endif //__cplusplus

#endif // PCH_H

更新 我认为原因在于boost和Odeint都是模板化程度较高的库,不知何故,32位Mingw编译器(下面的gcc)无法处理那么多的sutff(?!?)。也许64位版本的Mingw会更好用吗? BTW,昨天我用Mac上的clang编译了预编译头文件编译过程,编译按预期成功完成,执行时间太棒了:第一次编译时间不超过10秒,然后PCH完成后花费的时间少于每次迭代重新编译1秒,在Windows上使用MSVC我第一次大约需要20秒,重新编译需要10秒,当然在Mingw上我甚至无法编译。

0 个答案:

没有答案