安装CGAL后,运行demo程序出现[Parse error at "BOOST_JOIN"]这样的错误字样。
解决方案主要是参考这个网址。
https://bugreports.qt-project.org/browse/QTBUG-22829
由于是英文,在昨晚状态不佳的情况下,我硬是没看懂。接下来说说这个上面的讨论情况和我自己的解决方案。
上面的问题描述大体是这样:我原来安装的是Qt+boost1.47,后来我将boost升级到boost1.48,结果就出现这样的问题(我的boost为1.53版本):
"Parse error at "BOOST_JOIN", pointing to
boost/type_traits/detail/has_binary_operator.hp(50)
然后我将boost换回1.47就没有这样的问题了。将我的问题向boost小组报告,结果是Qt的moc编译器和boost不兼容的问题。
讨论了几种解决方案(绿色的表示最可行的解决方案,可以只关注绿色的部分):
解决方案1:
能引起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个人觉得可行!