编译PCL时遇boost::throw_exception缺失问题,如何解决?
解决MSVC 2013编译PCL时Boost throw_exception未定义的问题
我最近在Windows(MSVC 2013)环境下编译PCL时碰到了个棘手的问题,卡了整整两天——之前编译PCL从来没出过这茬!
折腾半天终于揪出问题根源:boost\config\compiler\visualc.hpp里被设置了BOOST_NO_EXCEPTIONS宏,这直接导致boost/throw_exception.hpp没法正常定义boost::throw_exception函数,进而引发一连串编译错误。
我一开始试了各种常规操作:
- 通过CMake配置添加
/EHsc编译选项 - 在Visual Studio项目属性里手动把C/C++代码生成的「启用异常」设为
/EHsc
结果完全没用,甚至尝试手动修改Boost头文件里的宏定义,反而引出了更多连锁编译问题。
后来终于摸索出靠谱的解决步骤:
- 在CMakeLists.txt里强制启用Boost异常支持:在
find_package(Boost)之前,添加一行:
这会覆盖Boost默认的add_definitions(-DBOOST_ENABLE_EXCEPTIONS)BOOST_NO_EXCEPTIONS设置,强制让Boost启用异常处理。 - 确保编译选项正确传递:在CMake里明确设置C++编译选项:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") - 验证Visual Studio项目设置:生成项目后,检查项目属性里的
C/C++ -> 代码生成 -> 启用异常是否为「是(/EHsc)」,如果不是手动调整过来。
按这几步操作后,Boost就能正常定义boost::throw_exception,PCL的编译也顺利通过了。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

