VS 2015 +opencv 2.4.13 C++ .dll文件编写及调用
2016-11-12 15:34
197 查看
作为一个 小白。。捣鼓了几天的 .dll文件 也算是有了点心得,本文也只是个人理解
首先对于VS 2015 与 opencv 2.4.13的问题。由于opencv2.4.13并未直接给出VC14文件夹。。若想给VS2015装上opencv2.4.13 还得自己编译
具体过程参考 http://blog.csdn.net/lfw198911/article/details/52649459 写的很细也很清楚。 ps:修改 PATH系统环境变量后必须重启才能生效...以往的博文中各种缺失.dll文件就
是由于这个原因!! 修改完PATH后只用重新启动才会有效,不然操作系统只知道先前的PATH变量。。并不会去访问你新加的路径 。。这就导致 在测试程序时。。发现能识别出
opencv的函数和头文件。。编译也没错,但就是在运行时各种报错...丢失.dll文件 。。这是由于当你配置好 工程的属性管理器后只是配置了.lib文件的位置。。而.lib中包含了
opencv函数名与实际编译后的函数名的映射(!!是的函数在编译后 函数名是会变的。。具体原理请问 度娘)由于 opencv也是使用.dll文件的形式进行加载。。 你的程序在编译
完成后并未正真的包含了opencv的代码。。它们仍然在.dll文件中 。只有当运行时,计算机才会根据需要动态的加载.dll文件,与你的程序进行链接,从而完成你的要求!!所以 当
运行出现 .dll文件丢失时 ,先查看PATH 是否包含了对应的库文件夹,重启电脑试试看,如果还是有问题,那么要不就是你的 .dll文件出问题了,要不就是真的丢失了!!
PS: 网上所谓的在 C:\Windows\System32 或者 在C:\Windows\SysWOW64文件夹下 添加对应的.dll文件,就是因为这是 计算机对于.dll文件的默认搜索路径。。虽然这样做也能
解决问题,但不便于管理和更新。。久而久之只会变的更加的乱。。 作为一个“强迫症”患者(笑)表示有些问题还是得自己弄懂弄通的。。一直像个无头苍蝇乱撞,始终不是解决
问题的方法。。当然如果我的理解有误,勿喷
之前自己脑子抽筋硬是装了opencv 3.1结果在这就遇到问题了。。opencv3.0以后(我所知的3.0 及3.1) 的cv名字空间中有个“ACCESS_MASK”的宏与 windows.h头文件中的宏
同名了。。这就导致 如果想采用动态加载 .dll文件的话。。 当你想使用LoadLibrary函数而不得不加载 windows.h文件时各种报错。。“ACCESS_MASK”不明确。。 解决办法 手动加CV:: 去掉using namespace cv; 要不和我一样换opencv2.4.13
蛋疼了很久。
对于.dll文件的编写。。没啥好说的。。可以看看孙鑫的视频 (19) 对于声明导出函数或类时有三种方式 ,可以查查MSDN
PS:在VS 2015中 当使用.def文件时必须要在属性管理器中手动添加 ,不然VS是不知道的。
最后,加上我的一些个人理解。。如果要使用.dll中类中的成员函数时,最好导出整个类,虽然也有只导出成员函数仍能正常运行的例子。。但当类中还有其他的成员函数未被
导出时,这时候你虽然添加了头文件,使得计算机能认识这个类,并且知道它的某个函数在某个.dll文件中,但是它的其余成员函数的实现的呢?很明显答案是,没有实现。这
时候计算机该怎么办呢?我的答案是,计算机会把整个类当成是被 _declspec(dllimport)修饰的,从而在所有的.dll文件中查找,然而你在.dll中只导出了类的某个你所需要的成
员函数,并未导出整个类,所以就会报链接错误 LNK2019 LNK1120 。 这是对于你采用静态加载的方式使用.dll文件时会出现的问题。当使用静态加载的方式时,计算机会在
你的程序运行时同时加载 声明了静态加载方式的所有.dll文件。。如果你加载的多了这将会是一个不小的负担。。但当使用 动态加载时又会面临无法使用类的方式,所以我推荐
使用这种方式调用.dll中的类 详情请见 http://blog.csdn.net/chollima/article/details/5324808
以上只是个人理解,很欢迎大神们帮忙修改纠正。。
小白的第一篇长的。。就这样了
首先对于VS 2015 与 opencv 2.4.13的问题。由于opencv2.4.13并未直接给出VC14文件夹。。若想给VS2015装上opencv2.4.13 还得自己编译
具体过程参考 http://blog.csdn.net/lfw198911/article/details/52649459 写的很细也很清楚。 ps:修改 PATH系统环境变量后必须重启才能生效...以往的博文中各种缺失.dll文件就
是由于这个原因!! 修改完PATH后只用重新启动才会有效,不然操作系统只知道先前的PATH变量。。并不会去访问你新加的路径 。。这就导致 在测试程序时。。发现能识别出
opencv的函数和头文件。。编译也没错,但就是在运行时各种报错...丢失.dll文件 。。这是由于当你配置好 工程的属性管理器后只是配置了.lib文件的位置。。而.lib中包含了
opencv函数名与实际编译后的函数名的映射(!!是的函数在编译后 函数名是会变的。。具体原理请问 度娘)由于 opencv也是使用.dll文件的形式进行加载。。 你的程序在编译
完成后并未正真的包含了opencv的代码。。它们仍然在.dll文件中 。只有当运行时,计算机才会根据需要动态的加载.dll文件,与你的程序进行链接,从而完成你的要求!!所以 当
运行出现 .dll文件丢失时 ,先查看PATH 是否包含了对应的库文件夹,重启电脑试试看,如果还是有问题,那么要不就是你的 .dll文件出问题了,要不就是真的丢失了!!
PS: 网上所谓的在 C:\Windows\System32 或者 在C:\Windows\SysWOW64文件夹下 添加对应的.dll文件,就是因为这是 计算机对于.dll文件的默认搜索路径。。虽然这样做也能
解决问题,但不便于管理和更新。。久而久之只会变的更加的乱。。 作为一个“强迫症”患者(笑)表示有些问题还是得自己弄懂弄通的。。一直像个无头苍蝇乱撞,始终不是解决
问题的方法。。当然如果我的理解有误,勿喷
之前自己脑子抽筋硬是装了opencv 3.1结果在这就遇到问题了。。opencv3.0以后(我所知的3.0 及3.1) 的cv名字空间中有个“ACCESS_MASK”的宏与 windows.h头文件中的宏
同名了。。这就导致 如果想采用动态加载 .dll文件的话。。 当你想使用LoadLibrary函数而不得不加载 windows.h文件时各种报错。。“ACCESS_MASK”不明确。。 解决办法 手动加CV:: 去掉using namespace cv; 要不和我一样换opencv2.4.13
蛋疼了很久。
对于.dll文件的编写。。没啥好说的。。可以看看孙鑫的视频 (19) 对于声明导出函数或类时有三种方式 ,可以查查MSDN
PS:在VS 2015中 当使用.def文件时必须要在属性管理器中手动添加 ,不然VS是不知道的。
最后,加上我的一些个人理解。。如果要使用.dll中类中的成员函数时,最好导出整个类,虽然也有只导出成员函数仍能正常运行的例子。。但当类中还有其他的成员函数未被
导出时,这时候你虽然添加了头文件,使得计算机能认识这个类,并且知道它的某个函数在某个.dll文件中,但是它的其余成员函数的实现的呢?很明显答案是,没有实现。这
时候计算机该怎么办呢?我的答案是,计算机会把整个类当成是被 _declspec(dllimport)修饰的,从而在所有的.dll文件中查找,然而你在.dll中只导出了类的某个你所需要的成
员函数,并未导出整个类,所以就会报链接错误 LNK2019 LNK1120 。 这是对于你采用静态加载的方式使用.dll文件时会出现的问题。当使用静态加载的方式时,计算机会在
你的程序运行时同时加载 声明了静态加载方式的所有.dll文件。。如果你加载的多了这将会是一个不小的负担。。但当使用 动态加载时又会面临无法使用类的方式,所以我推荐
使用这种方式调用.dll中的类 详情请见 http://blog.csdn.net/chollima/article/details/5324808
以上只是个人理解,很欢迎大神们帮忙修改纠正。。
小白的第一篇长的。。就这样了
相关文章推荐
- 关于 VS 2015 C++ .dll文件的学习与编写(一)
- OpenCV 2.4.13 编译使用(VS2015下)
- OpenCV 2.4.13 在 VS2015上的配置
- Windows VS2015配置OpenCV2.4.13 新手指南(C/C++)
- 【opencv】VS2015+opencv2.4.13 GPU模块编译
- VS 2015 64位CMake编译openCV3.1.0必备文件
- VS2015和opencv2.4.13的配置
- 基于C#的TCP文件传输 由于水平有限,代码粗糙请见谅,vs2015编写 文件发送附代码
- Win7 VS2015 x64 MASM汇编语言编写DLL文件
- VS2015 配置 OpenCV 2.4.13版本遇到的bug(主要是缺少MSVCP120D.dll !)
- Csharp调用基于Opencv编写的类库文件
- Opencv2.4.13 vs2015 配置
- windows 10(64位)下实现vs20120C++调用matlab r2014a编写的m文件生成的.dll,.lib,.h文件
- openCV3.1.0与 openCV2.4.13的安装配置 (基于VS2015)
- OpenCV 2.4.13 + VS2015 版本下的环境配置 WIN10
- 在VS2015下配置基于OPENCV2.4.13的开发环境
- opencv2.4.13+win10+vs2015
- opencv2.4.13配置VS2015(永久配置)
- opencv2.4.13+vs2015的链接库配置lib文件
- Windows OpenCV2.4.13 VS2015 编译