编译好ceres库,引用时报错:
1、\glog\log_severity.h(66): fatal error C1189: #error: ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail.
错误代码定位如下:
根据代码定义,增加预定义宏。解决方式:
项目属性->C/C++ ->预处理器->预处理器定义,加:GLOG_NO_ABBREVIATED_SEVERITIES。
问题解决。
2、ceres\internal\numeric_diff.h(150): error C2589: “(”:“::”右边的非法标记
报错代码为如下两段:
原因:min/max两个宏被污染了。解决方式:
方法1、设置项目属性,在预定义处理器中添加定义NOMINMAX来禁止使用Vsual C++的min/max宏定义。
项目属性 -> C/C++ -> 预处理器 -> 预处理器定义 (此处添加预定义编译开关 NOMINMAX)
方法2、加上括号,与Vsual C++的min/max宏定义区分开。
int num_params = std::max(0, user_last_param - user_first_param + 1);
修改为:
int num_params = (std::max)(0, user_last_param - user_first_param + 1);