我的复杂的OpenCV编译之路(OpenCV3.1.0 + VS2010 + Win7)
教程:www.cnblogs.com/jliangqiu2016/p/5597501.html
这里主要记载我编译遇到的错误及解决方法。
OpenCV3.1软件下载:https://sourceforge.net/projects/opencvlibrary/
https://blog.csdn.net/liu798675179/article/details/51259505
Description 描述
The Open Source Computer Vision Library has >2500 algorithms, extensive documentation and sample code for real-time computer vision. It works on Windows, Linux, Mac OS X, Android and iOS.
OpenCV库有超过2500种实时计算机视觉算法,扩展文档和例子代码。它可以在Windows、Linux、Mac OS X、Android和iOS上运行。
Homepage: opencv.org 主页:opencv.org
Q&A forum: answers.opencv.org 问答社区:answers.opencv.org
Documentation: docs.opencv.org 文档:docs.opencv.org
Please pay special attention to our tutorials!http://docs.opencv.org/doc/tutorials/tutorials.html
请特别关注一下我们的教程!http://docs.opencv.org/doc/tutorials/tutorials.html
Books about the OpenCV are described here: http://opencv.org/books.html 关于OpenCV的书籍在这里描述:http://opencv.org/books.html
Categories 分类
License 许可
编译:http://www.cnblogs.com/jliangqiu2016/p/5597501.html
关于ffmpeg其实挺眼熟的因为之前视频格式转换混流时下的,好像是源代码
图1 早前下载的ffmpeg-2.8
结果老是出现opencv_ffmpeg_64.dll下载超时,从csdn上下载的又都过时了,发现opencv现在用的是ffmpeg为3.1.3版本,是16年9月8号更新的,而csdn上还未有这个日期之后的dll
FFMpeg 3.1.3修复来自支付宝unLimit Security Team的高危漏洞:http://www.freebuf.com/vuls/114484.html FFMpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,包括了目前领先的音/视频编码库 libavcodec。据悉很多软件及系统中,包括现在很多主流的移动端APP采用了FFMpeg,意味着大量的软件及系统都被暴露于网络攻击之下。 漏洞原理:支付宝移动安全团队unLimitSecurity Team的安全研究员超六,发现ffmpeg在解码exr文件时存在一个堆溢出漏洞,CVE编号为CVE-2016-6920。该漏洞存在于解析exr图片文件时,程序对输入参数校验不严,可能导致任意地址写,并且写入数据部分可控。此漏洞在一定条件下能导致任意地址写。漏洞修复:ffmpeg3.1.3中已修复该漏洞(https://ffmpeg.org/security.html),建议使用ffmpeg处理exr文件的软件及系统尽快升级至最新版。漏洞修复如下:
(https://github.com/FFmpeg/FFmpeg/commit/01aee8148d4fa439cce678a11f5110656c98de1f)
那么如何下载到或者获取到opencv_ffmpeg_64.dll呢?网络下载(官网 Git win32版列表 win64版列表)或者自己编译。若是自己编译则需要最新的对应的ffmpeg包,若是网络下载则是找到网络地址。win32版MD5码为:32BA7790B0AC7A6DC66BE91603637A7D,win64版MD5码为:068ecaa459a5571e7909cff90999a420。校验正确才可以。校验工具:Hash1.0.4。
OpenCV关于ffmpeg使用的声明。
* On Linux and other Unix flavors OpenCV uses default or user-built ffmpeg/libav libraries.
If user builds ffmpeg/libav from source and wants OpenCV to stay BSD library, not GPL/LGPL,
he/she should use –enabled-shared configure flag and make sure that no GPL components are
enabled (some notable examples are x264 (H264 encoder) and libac3 (Dolby AC3 audio codec)).
See https://www.ffmpeg.org/legal.html for details.
在Linux和其他的Unix中OpenCV使用默认的或用户建立的ffmpeg/libav库。
如果用户从源建立ffmpeg/libav,并且想OpenCV保持BSD库,而不是GPL/LGPL,那么他/她应该使用 –分享允许的configure flag,并确保没有GPL组件使用,
一些值得注意的例子是x264(H264编码器)和libac3(Dolby AC3 音频编码)。看https://www.ffmpeg.org/legal.html查看更多细节。
If you want to play very safe and do not want to use FFMPEG at all, regardless of whether it\’s installed on
your system or not, configure and build OpenCV using CMake with WITH_FFMPEG=OFF flag. OpenCV will then use
AVFoundation (OSX), GStreamer (Linux) or other available backends supported by opencv_videoio module.
如果你想更安全地play,而不想使用任何的FFMPEG,无论是否它安装在了你的系统中,configure并且建立OpenCV时选择CMake为WITH_FFMPEG=OFF标志。OpenCV将
使用AVFoundation(OSX),GStreamer(Linux)或者其他可用的opencv_videoio模块支持的备选方案。
There is also our self-contained motion jpeg codec, which you can use without any worries.
It handles CV_FOURCC(\’M\’, \’J\’, \’P\’, \’G\’) streams within an AVI container (“.avi”).
还有我们自包含的运动jpeg编码,你可以毫无担心的使用。
它使用AVI container(“.avi”)来处理CV_FOURCC(\’M\’, “J\’, \’P\’, \’G\’)流。
* On Windows OpenCV uses pre-built ffmpeg binaries, built with proper flags (without GPL components) and
wrapped with simple, stable OpenCV-compatible API.
在Windows上OpenCV使用预编译的ffmpeg二进制文件,它是使用合适的标志(不带有GPL组件)和包括简单稳定的OpenCV-兼容的API编译的。
The binaries are opencv_ffmpeg.dll (version for 32-bit Windows) and
opencv_ffmpeg_64.dll (version for 64-bit Windows).
这些二进制文件是opencv_ffmpeg.dll(32位的Windows版本)和opencv_ffmpeg_64.dll(64位的Windows版本)。
See build_win32.txt for the build instructions, if you want to rebuild opencv_ffmpeg*.dll from scratch.
查看build_win32.txt看编译指示,如果你想从头编译opencv_ffmpeg*.dll的话。
The pre-built opencv_ffmpeg*.dll is: 预编译的opencv_ffmpeg*.dll是:
* LGPL library, not BSD libraries.
* Loaded at runtime by opencv_videoio module. 由opencv_videoio模块在运行时加载的。
If it succeeds, ffmpeg can be used to decode/encode videos; 如果它成功了,ffmpeg可以用来解码/编码视频。
otherwise, other API is used. 否则,其他的API将被使用。
FFMPEG build contains H264 encoder based on the OpenH264 library, that should be installed separatelly.
OpenH264 Video Codec provided by Cisco Systems, Inc.
See https://github.com/cisco/openh264/releases for details and OpenH264 license.
Downloaded binary file can be placed into global system path (System32 or SysWOW64) or near application binaries.
You can also specify location of binary file via OPENH264_LIBRARY_PATH environment variable.
FFMPEG编译包括基于OpenH264库的H264编码器,它应该分开安装。
OpenH264视频编码由Cisco Systems, Inc提供。
查看https://github.com/cisco/openh264/releases看细节和OpenH264许可证。
下载的二进制文件可以放进全局系统路径(System32或者SysWOW64)或者临近的应用二进制中。
你还可以通过OPENH264_LIBRARY_PATH环境变量来指定二进制文件的路径。
If LGPL/GPL software can not be supplied with your OpenCV-based product, simply exclude
opencv_ffmpeg*.dll from your distribution; OpenCV will stay fully functional except for the ability to
decode/encode videos using FFMPEG (though, it may still be able to do that using other API,
such as Video for Windows, Windows Media Foundation or our self-contained motion jpeg codec).
如果LGPL/GPL软件不能跟你的基于OpenCV的产品使用,只需要将opencv_ffmpeg*.dll从你的发布里剔除就可以了;OpenCV依然会
保持完整的功能,除了使用FFMPEG解码/编码视频的能力(尽管如此,它应该可以使用其他的API来实现该功能,比如Video for Windows, Windows Media Foundation或者我们自包含的动态jpeg编码)。
See license.txt for the FFMPEG copyright notice and the licensing terms.
查看license.text看FFMPEG复制权利说明和许可证条款。
最后还是下载了下来。
添加了对于opencv_contrib-master的引用。 点击CMake的Configure按钮
然后又下载了protobuf-cpp-3.1.0.tar.gz和vgg_generated_xx.i文件。
结果generate出基于编译器的工程文件。
点击该工程文件,在debug模式下编译该解决方案。
结果出现了错误。
显示错误为:
error C3416 :\’function\’ : an explicit specialization may not be explicitly instantiated 一个显式特化可能没有被显式实例化。
Google了一下,MSDN上给出的解释是:
A function cannot be both explicitly specialized and explicitly instantiated.
一个函数不能同时被显式特化和显式实例化。
什么叫显式特化和显式实例化呢?
关于显式特化:就是用特指的某种参数特指某一种函数。 https://zhidao.baidu.com/question/144766157.html
显式实例化:就是传入实际的参数实例化函数。
那么既实例化又显式特化有可能产生矛盾。
看一下源代码
//Explicit instantiation 显式实例化
template Ptr<Layer> createLayerFromCaffe<ConvolutionLayer>(LayerParams&); //LayerParams&是实例化参数,ConvolutionLayer是图层类
这是由模板Ptr而来的
Ptr<Layer>就是显式指定类型为Layer,相当于template <typename T=Layer>。
显式结构体名称为createLayerFromCaffe。这里又给它指定了一个显式参数为ConvolutionLayer,这个应该是Layer的子类。
而显式特化:
30 template<> //显式特化
31 Ptr<Layer> createLayerFromCaffe<ConvolutionLayer>(LayerParams ¶ms) //函数实现
32 {
33 Ptr<BaseConvolutionLayer> l = ConvolutionLayer::create();
34 initConvDeconvLayerFromCaffe(l, params); //初始化ConvDeconvLayerFromCaffe
35 return Ptr<Layer>(l);
36 }
显式特化和显式实例化只能存在一个。
然后又出现了
Error 10 error C3861: \’round\’: identifier not found D:\opencv_contrib-master\modules\xfeatures2d\src\boostdesc.cpp 235 1 opencv_xfeatures2d
在工程opencv_xfeatures2d中boostdesc.cpp文件第235行round函数没有找到。
但是round函数是math cstdlib cmath stdlib到底是哪一个呢?
https://zhidao.baidu.com/question/481456600.html
double
round(
double
val)
{
return
(val> 0.0) ?
floor
(val+ 0.5) :
ceil
(val- 0.5);
}
Error 9 error C2660: \’cv::calibrateCamera\’ : function does not take 12 arguments D:\opencv_contrib-master\modules\aruco\src\charuco.cpp 731 1 opencv_aruco
在工程opencv_aruco中charuco.cpp文件第731行的cv::calibrateCamera函数不能带有12个参数。
接着是:
error MSB6006: “cmd.exe” exited with code 1. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets 151 6 opencv_java
Message 84 Could not find schema information for the attribute \’Condition\’. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets 549 34 Miscellaneous Files
MSB6006: cmd.exe exited with code 1:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/51421c04-87ac-4c31-824c-f0de899e7cc5/msb6006-cmdexe-exited-with-code-1?forum=msbuild
OpenCV memory leak issue:
http://stackoverflow.com/questions/5610294/opencv-memory-leak-issue
内存泄露就通不过吗?
警告:warning C4819: The file contains a character that cannot be represented in the current code page(936). Save the file in Unicode format to prevent data loss
http://blog.csdn.net/xiaoting451292510/article/details/17548957
在projects->options->project and solution->build and run->versobity更改为detailed或者diagnosis
发现output输出错误为:
48> [javac] E:\opencv_c\src\org\opencv\calib3d\Calib3d.java:7: 无法访问 java.util.ArrayList (TaskId:286)
48> [javac] 错误的类文件: D:\Java\jdk1.7.0_13\jre\lib\rt.jar(java/util/ArrayList.class) (TaskId:286)
48> [javac] 类文件具有错误的版本 51.0,应为 49.0 (TaskId:286)
48> [javac] 请删除该文件或确保该文件位于正确的类路径子目录中。 (TaskId:286)
48> [javac] import java.util.ArrayList; (TaskId:286)
48> [javac] ^ (TaskId:286)
48> [javac] 1 错误 (TaskId:286)
48> Target \’jar\’ failed with message \’Compile failed; see the compiler error output for details.\’. (TaskId:286)
48> (TaskId:286)
48> BUILD FAILED (TaskId:286)
48> E:\opencv_c\build.xml:9: Compile failed; see the compiler error output for details. (TaskId:286)
48> (TaskId:286)
48> Total time: 12 seconds (TaskId:286)
48>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(151,5): error MSB6006: “cmd.exe” exited with code 1.
48>Done executing task “CustomBuild” — FAILED. (TaskId:286)
好像是说java编译器有问题:版本太高了?我的Java版本为1.7.0_13当时反编译时安的,但现在版本好像太高了反而不行??
这难道不是C++程序吗怎么又用到java编译器 不得不说opencv很不可思议啊
的确是有Java文件啊
那么同时安装java1.6和Java1.7怎么切换环境变量呢 https://zhidao.baidu.com/question/1690271723208020468.html
cmd命令下 查看java -version和javac -version目前是1.7.0_13
我在d盘java目录下安装了两个版本:
现在需要切换环境变量java_home 之后再在cmd下看一下版本是否切换成功
开始->运行->输入cmd->运行cmd.exe程序输入java -version和javac -version发现已经切换成功
重新打开OpenCV.sln试一下重编译是否还出错
发现这次成功编译了。
但是利用https://blog.csdn.net/liu798675179/article/details/51259505所下的最新版contribution出现了错误提示“ocv_testara”。所以我用的原来的再次编译,但是原来的版本提示过错误,我是手动修改的:(1)round函数我是自编译的,(2)sqrt对于long double和float的模棱两可时我是选的double,有两个选了float,(3)对于显式实例化和显式特化我删除了显式实例化,(4)对于cameraCalibrate函数的参数问题我从12参数改到了9参数。
改成java1.6版本后opencv_java和opencv_test_java工程还是出错。
这次的提示信息是:
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\BoostDesc.java:11: 找不到符号
89> [javac] 符号: 类 Feature2D
89> [javac] public class BoostDesc extends Feature2D {
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\BriefDescriptorExtractor.java:11: 找不到符号
89> [javac] 符号: 类 Feature2D
89> [javac] public class BriefDescriptorExtractor extends Feature2D {
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\DAISY.java:11: 找不到符号
89> [javac] 符号: 类 Feature2D
89> [javac] public class DAISY extends Feature2D {
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\FREAK.java:13: 找不到符号
89> [javac] 符号: 类 Feature2D
89> [javac] public class FREAK extends Feature2D {
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\LATCH.java:11: 找不到符号
89> [javac] 符号: 类 Feature2D
89> [javac] public class LATCH extends Feature2D {
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\LUCID.java:11: 找不到符号
89> [javac] 符号: 类 Feature2D
89> [javac] public class LUCID extends Feature2D {
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\MSDDetector.java:11: 找不到符号
89> [javac] 符号: 类 Feature2D
89> [javac] public class MSDDetector extends Feature2D {
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\SIFT.java:11: 找不到符号
89> [javac] 符号: 类 Feature2D
89> [javac] public class SIFT extends Feature2D {
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\SURF.java:11: 找不到符号
89> [javac] 符号: 类 Feature2D
89> [javac] public class SURF extends Feature2D {
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\StarDetector.java:11: 找不到符号
89> [javac] 符号: 类 Feature2D
89> [javac] public class StarDetector extends Feature2D {
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\VGG.java:13: 找不到符号
89> [javac] 符号: 类 Feature2D
89> [javac] public class VGG extends Feature2D {
89> [javac] ^
98> test_chesscorners_timing.cpp
98> test_compose_rt.cpp
98>D:\OpenCV3.1.0\sources\modules\core\include\opencv2/core/utility.hpp : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\BoostDesc.java:41: 找不到符号
98> test_cornerssubpix.cpp
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.BoostDesc
89> [javac] delete(nativeObj);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\BoostDesc.java:39: 方法未覆盖其父类的方法
89> [javac] @Override
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\BriefDescriptorExtractor.java:41: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.BriefDescriptorExtractor
89> [javac] delete(nativeObj);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\BriefDescriptorExtractor.java:39: 方法未覆盖其父类的方法
89> [javac] @Override
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\DAISY.java:48: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.DAISY
89> [javac] delete(nativeObj);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\DAISY.java:46: 方法未覆盖其父类的方法
89> [javac] @Override
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\FREAK.java:49: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.FREAK
89> [javac] delete(nativeObj);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\FREAK.java:47: 方法未覆盖其父类的方法
89> [javac] @Override
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\LATCH.java:41: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.LATCH
89> [javac] delete(nativeObj);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\LATCH.java:39: 方法未覆盖其父类的方法
89> [javac] @Override
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\LUCID.java:32: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.LUCID
89> [javac] delete(nativeObj);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\LUCID.java:30: 方法未覆盖其父类的方法
89> [javac] @Override
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\MSDDetector.java:18: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.MSDDetector
89> [javac] delete(nativeObj);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\MSDDetector.java:16: 方法未覆盖其父类的方法
89> [javac] @Override
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\SIFT.java:41: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.SIFT
89> [javac] delete(nativeObj);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\SIFT.java:39: 方法未覆盖其父类的方法
89> [javac] @Override
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\SURF.java:47: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.SURF
89> [javac] boolean retVal = getExtended_0(nativeObj);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\SURF.java:61: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.SURF
89> [javac] boolean retVal = getUpright_0(nativeObj);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\SURF.java:75: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.SURF
89> [javac] double retVal = getHessianThreshold_0(nativeObj);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\SURF.java:89: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.SURF
89> [javac] int retVal = getNOctaveLayers_0(nativeObj);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\SURF.java:103: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.SURF
89> [javac] int retVal = getNOctaves_0(nativeObj);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\SURF.java:117: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.SURF
89> [javac] setExtended_0(nativeObj, extended);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\SURF.java:131: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.SURF
89> [javac] setHessianThreshold_0(nativeObj, hessianThreshold);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\SURF.java:145: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.SURF
89> [javac] setNOctaveLayers_0(nativeObj, nOctaveLayers);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\SURF.java:159: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.SURF
89> [javac] setNOctaves_0(nativeObj, nOctaves);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\SURF.java:173: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.SURF
89> [javac] setUpright_0(nativeObj, upright);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\SURF.java:181: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.SURF
89> [javac] delete(nativeObj);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\SURF.java:179: 方法未覆盖其父类的方法
89> [javac] @Override
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\StarDetector.java:41: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.StarDetector
89> [javac] delete(nativeObj);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\StarDetector.java:39: 方法未覆盖其父类的方法
89> [javac] @Override
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\VGG.java:49: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.VGG
89> [javac] compute_0(nativeObj, image.nativeObj, keypoints_mat.nativeObj, descriptors.nativeObj);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\VGG.java:57: 找不到符号
89> [javac] 符号: 变量 nativeObj
89> [javac] 位置: 类 org.opencv.xfeatures2d.VGG
89> [javac] delete(nativeObj);
89> [javac] ^
89> [javac] D:\OpenCV3_1\src\org\opencv\xfeatures2d\VGG.java:55: 方法未覆盖其父类的方法
89> [javac] @Override
89> [javac] ^
89> [javac] 44 错误
89> Target \’jar\’ failed with message \’Compile failed; see the compiler error output for details.\’.
98>D:\OpenCV3.1.0\sources\modules\core\include\opencv2/core/utility.hpp : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
98> test_decompose_projection.cpp
Java 中找不到符号的错误
http://bbs.csdn.net/topics/390937058