平台:win10 x64 +VS 2015专业版 +opencv-2.4.11 + gtk_-bundle_2.24.10_win32
参考博客:https://www.cnblogs.com/cql/archive/2013/05/23/3095749.html
区别:VS2015,opencv2.4.11, gtk_-bundle_2.24.10_win32版本不同,稍有差别
一、OPENSIFT编译运行
区别:Visual Studio 2015专业版的项目中稍作改动并编译通过。
1.1 VS 2015专业版配置VS项目
VS 2015专业版 +opencv-2.4.11下载及安装见我的另一篇博客:https://www.cnblogs.com/Alliswell-WP/p/VS2015_OpenCV.html
那篇博客安装的是opencv-3.4.1-vc14_vc15 ,而本平台需要安装opencv-2.4.11 (那篇博客附有云盘下载链接),安装方法雷同,
注意:添加环境变量哦
首先解压OPENSIFT.zip ->里边有(“说明.txt”—说明了目录下各个文件,“SIFT程序vs”—为VS2012项目版本,对源码进行部分修改注释,“robwhess-opensift-300bad1.zip”—
从http://robwhess.github.io/opensift/下载的OpenSIFT源码)->将“SIFT程序vs”文件夹重命名为“SIFT”,然后拷贝到VS的工程文件夹下(我的是:“D:WorkingVS2015Projects”文件夹下)
->进入SIFT文件夹后用VS2015打开SIFT.vcxproj -> 默认模板解决方案平台选择是:Debug和解决方案配置选择是:Win32,
这时直接点击本地Windows调试器会有一大堆错误,还需要进行下面的配置。
1.2 OpenCV配置
下载链接:https://pan.baidu.com/s/12_DTxM265ZYmg5EBeacjNQ 密码:kbl3
下载后为:opencv-2.4.11.exe
安装:双击该可执行文件后更改路径(我的是:D:ProgramFilesopencv2)后点击“Extract”即可完成安装
配置:1.添加环境变量(我的为:D:ProgramFilesopencv2opencvuildx86vc12in)
注意入坑1:环境变量要配置为x86的,而不能是x64的,这和vs2015平台选择的win32统一
2.VS2015中opencv的配置:在SIFT处单击鼠标右键,在弹出的快捷菜单中选择“属性”选项,进入SIFT的属性页
->(默认)配置处选择:Debug,平台选择:活动(Win32)
在“配置属性”点击“VC++目录“->“包含目录”点击编辑->在“包含目录”的对话框中将OpenCV的头文件路径(一共三个,在build文件夹下)添加进去->点击“确定“
我的是:1.D:ProgramFilesopencv2opencvuildinclude 2.D:ProgramFilesopencv2opencvuildincludeopencv 3.D:ProgramFilesopencv2opencvuildincludeopencv2
>“库目录”点击编辑->在“库目录”的对话框中将静态链接库路径(在uildx64或者x86文件夹所在的路径,这和vs2015平台选择的win32统一,选择x86)
我的是:D:ProgramFilesopencv2opencvuildx86vc12lib添加进去->点击“确定“
在“配置属性”点击“链接器“->点击“输入”->-> 在“附加依赖项”点击编辑->把lib库的名称(lib库文件在uildx86vc14lib下)添加进去->点击“确定“->点击“确定“
Debug配置下:
opencv_calib3d2411d.lib;opencv_contrib2411d.lib;opencv_core2411d.lib;opencv_features2d2411d.lib;opencv_flann2411d.lib;opencv_gpu2411d.lib;
opencv_highgui2411d.lib;opencv_imgproc2411d.lib;opencv_legacy2411d.lib;opencv_ml2411d.lib;opencv_objdetect2411d.lib;opencv_ts2411d.lib;opencv_video2411d.lib;
Release配置下(先不用配置):
opencv_contrib2411.lib;opencv_core2411.lib;opencv_features2d2411.lib;opencv_flann2411.lib;opencv_gpu2411.lib;opencv_highgui2411.lib;opencv_imgproc2411.lib;
opencv_legacy2411.lib;opencv_ml2411.lib;opencv_objdetect2411.lib;opencv_ts2411.lib;opencv_video2411.lib;
注意入坑2:本平台需要安装opencv 2.x ,不能安装opencv 3.x,因为依赖库有问题,opencv3.x集成为一个了
注意入坑3:系统环境变量opencv只能配置一个(我的为:D:ProgramFilesopencv2opencvuildx86vc12in),如果有opencv3.x或者opencv 2.x的x64的都会在VS中运行出错
如D:ProgramFilesopencv2opencvuildx86vc12in和D:ProgramFilesopencv2opencvuildx64vc12in就会报错:应用程序无法启动0xc000007b
1.3 GTK+配置
下载:http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/
我下载了2.24.10版本,下载后文件为:gtk_-bundle_2.24.10-20120208_win32.zip
注意入坑4:官网下载:https://www.gtk.org/download/windows.php, 没有All-in-one bundle 版本,而要求下载msys2-x86_64-20180531.exe
而MSYS2 (Minimal SYStem 2) 是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境。同时它也是一个在Cygwin (POSIX 兼容性层) 和
MinGW-w64(从”MinGW-生成”)基础上产生的,追求更好的互操作性的 Windows 软件。
解压至->->D:ProgramFiles,并将文件夹重命名为:gtk_-bundle_2.24.10_win32 (简洁点,方便添加环境变量和库)
配置:1.添加环境变量(我的为:D:ProgramFilesgtk_-bundle_2.24.10_win32in)
->->按说明验证,Win+R输入cmd运行,在cmd中输入“pkg-config --cflags gtk+-2.0” ,会有一些输出,输入 “gtk-demo” ,会出现一个示例,演示GTK+的一些功能控件。
->->接下来就跟OpenCV一样,要在VS2012的项目中进行一番配置了。在CMD中输入运行“pkg-config --cflags --libs gtk+-2.0”,可以看到需要包含的目录和链接库。
可以将这些输出导入txt文件中,运行“pkg-config --cflags --libs gtk+-2.0 > D:ProgramFilesgtk_-bundle_2.24.10_win32gtk.txt”,打开D:ProgramFilesgtk_-bundle_2.24.10_win32gtk.txt,
内容如下:-mms-bitfields -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/gtk-2.0
-ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/lib/gtk-2.0/include -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/atk-1.0 -I
D:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/cairo -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/gdk-pixbuf-2.0 -I
D:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/pango-1.0 -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/glib-2.0 -I
D:/ProgramFiles/gtk_-bundle_2.24.10_win32/lib/glib-2.0/include -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include -I
D:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/freetype2 -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/libpng14
-LD:/ProgramFiles/gtk_-bundle_2.24.10_win32/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lpangowin32-1.0 -lgdi32 -l
pangocairo-1.0 -lgdk_pixbuf-2.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl
然后根据这个来添加配置。在VS项目属性的“VC++目录”->“包含目录”中添加/GTK/include/gtk-2.0 到 /GTK/include/libpng14的这些路径,注意要用带盘符的完整路径,那个-mms-bitfields不用管它。
-L后面的D:/ProgramFiles/gtk_-bundle_2.24.10_win32/lib要添加在“库目录”中。
再后面的-l是链接库的名字,把这一串”gtk-win32-2.0.lib;gdk-win32-2.0.lib;atk-1.0.lib;gio-2.0.lib;pangowin32-1.0.lib;gdi32.lib;pangocairo-1.0.lib;gdk_pixbuf-2.0.lib;
pango-1.0.lib;cairo.lib;gobject-2.0.lib;gmodule-2.0.lib;gthread-2.0.lib;glib-2.0.lib;intl.lib;”添加进配置属性->链接器->输入->”附加依赖项“ 中就行了。
注意入坑5:报错gdk_screen_get_width被display_big_img调用,原因:直接复制D:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/gtk-2.0错误,因为里边是“/”,而win系统下路径是""
所以,“包含目录”“库目录”下的路径都是""
注意入坑6:只能下载为win32的,而不能是win64的,这和vs2015平台选择的win32统一
GTK+ win64的下载链接http://ftp.gnome.org/pub/gnome/binaries/win64/gtk+/2.22/
注意入坑7:报错找不到gdk.h或gtk.h>,原因:直接复制D:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/gtk-2.0错误,因为里边是“/”,而win系统下路径是""
所以,“包含目录”“库目录”下的路径都是"",
而和utils.c下#include <gdk/gdk.h>和#include <gtk/gtk.h>无关,改成#include <gtk-2.0/gdk/gdk.h>和#include <gtk-2.0/gtk/gtk.h>错误依旧
1.4代码修改
1.报错:“M_PI”未声明:发生在imgfeatures.c中。
解决方案:在imgfeatures.h中加入 #define M_PI 3.14159265358979323846
2.报错:无法找到头文件dirent.h。
解决方案:在网上百度搜索:dirent.h - dirent API for Microsoft Visual Studio,然后下载文件,我是在码云上下载的(链接:https://gitee.com/lomox/beanstalkd-win/blob/master/dirent.h,
解压后进入文件夹拷贝dirent.h),放在include文件夹(我的是:D:WorkingVS2015ProjectsSIFTinclude)下
3.运行本地windows调试器后报错:无法启动应用程序,因为计算机中丢失msvcp120d.dll,关闭sift.exe后返回值为 -1073741515 (0xc0000135) '未找到依赖 dll'。
原因:微软的Visual Studio最终用户许可协议是禁止发布调试版(名字后面有D)的DLL的,msvcp120d.dll和msvcr120d.dll是VS2013版本中的调试库文件,存在于路径:
“Microsoft Visual Studio 12.0VC edistx86Microsoft.VC120.CRT”中,VS2015版中只有msvcp140d.dll和msvcr140d.dll,但是OpenCV2.4.xx用的库版本最高为VC12,
该库并没有升级VC14,我们需要用到VS2013的调试库文件,所以会造成msvcp120d.dll和msvcr120d.dll的缺失。
解决方案:网上的方法是下载msvcp120d.dll和msvcr120d.dll到系统路径:C:WindowsSystem32或C:WindowsSysWOW64。但是我认为这样做不可取,随意添加到系统路径中容易与
其他软件的安装发生冲突。我们可以将其放到OpenCV库路径中:“OpenCVopencvuildx86vc12in”。这样当我们不使用opencv时也不会调用这两个库文件,比较安全。
下载链接:链接:https://pan.baidu.com/s/1nvN3atF 密码:11ak
我下载的为:msvcp120d%E7%AD%89.rar,解压后拷贝至“opencvuildx86vc12in”目录(我的是:D:ProgramFilesopencv2opencvuildx86vc12in)下 ,重新运行本地windows调试器
1.5 VS2015编译报错
VS“无法查找或打开PDB文件”是怎么回事?如何解决?参看:http://c.biancheng.net/view/474.html