能引起moc编译器崩溃的BOOST_JOIN 宏主要在这几个文件中:
- boost\type_traits\detail\has_binary_operator.hpp
- boost\type_traits\detail\has_postfix_operator.hpp
- boost\type_traits\detail\has_prefix_operator.hpp
他们最终被包含(原作者认为)在:
- boost\type_traits\has_operator.hpp
has_operator.hpp 使用header guards "BOOST_TT_HAS_OPERATOR_HPP_INCLUDED", 因此组织moc对含有BOOST_JOIN的宏进行编译。
对于使用cmake的用户,具体操作是:
QT4_WRAP_CPP(sources ${moc-sources} OPTIONS -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED)
解决方案2:
通过这个 方法#ifndef Q_MOC_RUN,使moc看不见使用了带有BOOST_JOIN宏头文件的头文件
#ifndef Q_MOC_RUN
#include <boost/python.hpp>
#endif
解决方案3:
Qt5.0已经解决moc的这个问题了。所以可以选择安装Qt5.0,但是Qt5.0只能安装在VS2010以上,而我使用的是VS2008,因此,我没有进行尝试。
自己的解决方案:(可以说是最懒惰的方法了)
将boos1.53换成boost1.47。
另外,我的软件版本为:
改动前:CGAL4.1+Boost1.53+Qt4.8.4+libQGLViewer2.3.17
改动后:CGAL4.1+Boost1.47+Qt4.8.4+libQGLViewer2.3.17
另外,我的安装过程主要参考CGAL的网站:
http://www.cgal.org/windows_installation.html
说明:以上,对于那个英文网站的理解也许还有些问题,望指正!另外,由于不大熟悉cmake,因此解决方案1理解的不是很透彻,如果有理解的可以指导一下,十分欢迎!并且解决方案1并不能解决所有的问题,正如接下来的讨论一样,为BOOST_JOIN宏不只在那三个文件中,其他的文件也包含这个宏。解决方案2个人觉得用起来很麻烦,我尝试了很久也没有把所有的引用了包含BOOST_JOIN宏的头文件的头文件找出来。解决方案3个人觉得可行!