OpenCV程序封装为64位DLL给Java调用
2017-09-21 17:08
330 查看
OpenCV程序封装为64位DLL给Java调用
//最近两周一直在忙一件事,刚刚做完给Java调用成功了,Mark一下。做图像处理的经常用到OpenCV这个第三方库,函数好写,打包不好打,尤其打包成64位dll时。下面就自己这段时期的工作,分享一下,如何封装为64位dll的,并且如何给Java调用的。
1,封装为64位DLL
首先要在win x64环境下,配置好属性。由于之前一直采用自己配置的属性页方式,比较懒,依赖于平台和本地环境。给封装带来了极大的不便利(但是自己开发时候很舒服,只要添加属性页就可以了,不用每次都配置,方法来源于《OpenCV2计算机视觉编程手册》chapter 1.3)。所以,一定要自己加载opencv的lib。可以先把程序做好,功能实现了之后,再考虑摘依赖的lib。可以使用Dependency Walker软件寻找你用到了哪些lib文件。
如图,标问号的说明没找到dll,这样在几层之后的dll貌似也没有打包的必要。这个软件使用很简单:打开此软件的exe,选择你要分析的exe打开即可。确保你的功能实现了,exe没有错误。
然后,在生成DLL的过程中,将使用到的opencv dll文件放入文件夹中,注意,要把.hpp、lib、dll一起放好。在引用dll时,有多种方法。我用到的是#include“.hpp” #pragram comment(lib,”.lib”),这样就把对应的DLL加载进去了。注意 Debug模式和Release模式用到的Dll不同,d.lib,*d.dll与.lib,*.dll有什么区别不再赘言。32位与64位也不同。注意区别。
在VS设置中,我遇到了一个错误,_MSC_VER,value值不匹配问题。
最后逼的没办法,换了对应的VS,解决。
在属性表—C/C++—代码生成中,运行库的设置也会产生影响。
分别生成DLL和LIB之后,要带着.h文件作为一个交付的包。我自己调用了一遍,处理没问题了才放心交付。
最后,出现的
error LNK2019: 无法解析的外部符号 “public: __cdecl Imf::Header::Header(int,int,float,class Imath::Vec2 const &,float,enum Imf::LineOrder,enum Imf::Compression)” (??0Header@Imf@@QEAA@HHMAEBV?Vec2@M@Imath@@MW4LineOrder@1@W4Compression@1@@Z),该符号在函数 "public: virtual bool __cdecl cv::ExrEncoder::write(class cv::Mat const &,class std::vector<int,class std::allocator<int> > const &)" (?write@ExrEncoder@cv@@UEAA_NAEBVMat@2@AEBV?vector@HV?$allocator@H@std@@@std@@@Z) 中被引用
这样的错误,是因为有lib文件没包含。在opencv自带的staticlib中会找到大部分,有这个方向就能够解决这类问题。
2,Java如何调用DLL可以参考此链接内容。网上内容驳杂,这个写的不错。
http://blog.csdn.net/jiangwei0910410003/article/details/17465085
相关文章推荐
- 【转载整理】eclipse 开发c/c++、Java使用JNI调用C程序、生成64位dll动态链接库
- 使用JNI技术实现JAVA程序调用dll
- JAVA判断32位还是64位,调用不同的DLL
- C程序调用JAVA方法(64位)
- 64位win7下使用vs2010调用opencv2.4.4缺少DLL问题
- java调用(c+opencv)的DLL
- JNI技术实现JAVA程序调用dll
- 64位进程调用32位dll的解决方法 / 程序64位化带来的问题和思考
- Java调用DLL程序
- dll封装调用java web service的问题
- Win8 系统下OpenCV + C++ 封装DLL在64位Win7系统下不可用的问题解决
- JAVA判断32位还是64位,调用不同的DLL(转)
- java调用.dll程序
- JAVA 通过 JNA 调用 C程序 dll 函数传入中文参数问题
- eclipse调试java调用matlab程序的7.17dll找不到的问题
- java调用c++写的dll 出现由于应该程序配置不正确,应用程序未能启动
- JAVA判断32位还是64位,调用不同的DLL
- 使用JNI技术实现JAVA程序调用dll
- 【转】将QT开发的界面程序封装成DLL,在VC中成功调用
- 使用JNI技术实现JAVA程序调用dll