解决opencv-3.0-beta中ACCESS_MASK定义冲突

opencv-3.0的工程中如果引用了头文件windows.h,会出现下面的编译错误

1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winnt.h(6405) : error C2872: ‘ACCESS_MASK‘ : ambiguous symbol
1>        could be ‘C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winnt.h(5589) : DWORD ACCESS_MASK‘
1>        or       ‘u:\OpenCv\opencv-3.0-beta\build\install\include\opencv2/core/mat.hpp(60) : ACCESS_MASK‘

网上倒是找到了解决方案

https://github.com/LeszekSwirski/opencv/commit/bac3bea9f7cc253934ee9004150206dd1cb22fcb

但是不知道是基于哪个baseline的,于是还是决定自己动手修改把。

在opencv-3.0-beta sources目录下搜索,只在mat.hpp和matrix.cpp中找到ACCESS_MASK,而且出现的次数也不多。这就好办了,直接把ACCESS_MASK改成__FIXME_ACCESS_MASK。重新编译,搞定。

不过这样修改还是存在隐患的,如果工程中引用了ACCESS_MASK,那么就会从windows的头文件获得一个错误的数值;这可能会导致一个非常隐蔽的bug。

时间: 2024-10-19 18:56:30

解决opencv-3.0-beta中ACCESS_MASK定义冲突的相关文章

C语言中宏定义(#define)时do{}while(0)的价值(转)

C语言中宏定义(#define)时do{}while(0)的价值 最近在新公司的代码中发现到处用到do{...}while(0),google了一下,发现Stack Overflow上早有很多讨论,总结了一下讨论,加上自己的理解,do{...}while(0)的价值主要体现在: 1. 增加代码的适应性 下面的宏定义没有使用do{...}while(0) #define FOO(x) foo(x); bar(x); 这样宏定义,单独调用不会出现问题,例如: FOO(100) 宏扩展后变成: 1 f

C++编译与链接(0)-.h与.cpp中的定义与声明

C++中有的东西需要放在可以在.h文件中定义,有的东西则必须放在.cpp文件中定义,有的东西在不同的cpp文件中的名字可以一样,而有的则不能一样 那么究竟哪些东西可在头文件中定义,声明,哪些东西又必须在.cpp中定义,声明呢? *以下所有的讨论都是在全局命名空间中(即不定义自己的namespace)下进行的 函数 1.在.h中只能声明函数,在.cpp中可以声明与定义函数 如果在.h中声明并定义一个函数,则该函数只能被#include一次,否则则会出现重定义错误 比如 1.h #pragma on

在Ubuntu中部署并测试Fabric 1.0 Beta

今天HyperLedger Fabric放出了1.0 Beta版的镜像,按照命名上来说,这应该是一个基本可用的版本了,所以我赶紧第一时间下载下来,把玩把玩.以下是在Ubuntu中安装并测试Fabric 1.0 Beta的步骤: 一.环境准备 1.1 安装VirtualBox并在其中安装好Ubuntu 这一步其实没啥好说的,下载好最新版的VirtualBox,下载Ubuntu Server,我用的是16.10 X64.在安装完Ubuntu后,需要保证apt source是国内的,不然如果是国外的话

OpenCV 3.0中IplImage* 转cv::Mat

在OpenCV 2.0中使用: IplImage * ipl1, *ipl2; // ... const cv::Mat m = cv::Mat(ipl,false); cv::Mat m2 = ipl2; 在OpenCV 3.0中: IplImage * ipl = ...; cv::Mat m = cv::cvarrToMat(ipl);

关于解决百度sitemap1.0一直提示校验中问题

实际原因是php设置问题,各个版本对应的设置有些不一样. php版本改成就好了. 修复方法:在插件里找到插件:\baidusubmit\inc.找到sitemap.php,查找curl_setopt($ch, CURLOPT_FOLLOWLOCATION,后面的数字1改成0就好了 关于解决百度sitemap1.0一直提示校验中问题

关于解决android4.0系统中菜单无法添加Icon的问题

在Android4.0系统中,创建菜单Menu,然后通过setIcon方法给菜单添加图标是无效的,图标不会显出来,而之前的系统中是可以显示出来的.这个问题的根本原因在于4.0系统中,涉及到菜单的源码类 MenuBuilder做了改变,其中有private boolean mOptionalIconsVisible = false;属性使得无法显示菜单图标. 但是,我们又无法在开发的应用程序中创建MenuBuilder这个对象的(因为MenuBuilder是系统内部的框架类). 当然如果不是很需要

解决android4.0系统中菜单(Menu)添加Icon无效问题

在Android4.0系统中,创建菜单Menu,通过setIcon方法给菜单添加图标是无效的,图标没有显出来,2.3系统中是可以显示出来的.这个问题的根本原因在于4.0系统中,涉及到菜单的源码类 MenuBuilder做了改变,该类的部分源码如下: 1 public class MenuBuilder implements Menu { 2 ... 3 private boolean mOptionalIconsVisible = false; 4 .... 5 void setOptional

解决Android 4.0以上版本中OptionsMenu菜单不显示ICON图标的问题

在Android4.0系统中,创建菜单Menu,通过setIcon方法给菜单添加图标是无效的,图标没有显出来,2.3系统中是可以显示出来的.这个问题的根本原因在于4.0系统中,涉及到菜单的源码类 MenuBuilder做了改变,该类的部分源码如下: public class MenuBuilder implements Menu { ... private boolean mOptionalIconsVisible = false; .... void setOptionalIconsVisib

【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置

本系列文章由@浅墨_毛星云 出品.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/19809337 1.下载和安装OpenCV SDK VS2010不用说,肯定都安装了吧.来说说当前最新的OpenCV版本2.4.8(2014年2月24日),2.4.9 (2014年4月)的下载和安装.与其说是安装,不如叫解压更加合适,因为我们下载的exe安装文件就是一个自解压程序而已. 在官网:http://opencv.org/上找到OpenCV