解决VS中Debug与Release版本切换的问题

今天看到一篇非常好的博客是关于LIB和DLL的区别与使用是文章,对于我们常常使用DLL与LIB,而又不知其所以然的孩纸们可以看一看http://www.cppblog.com/amazon/archive/2009/09/04/95318.html


最近在使用PCL以及VTK等开发库,但是使用过程中总会出现Debug与Release版本之间切换的问题,完全按照网上各种大牛的教程来配置的开发环境,为啥会爆出各种错误呢,一开始我也是一头雾水,明明在Debug或者Release模式下运行的好好地,可是切换模式后奇怪的错误接踵而至,而且我可能会使用到多种开发库来开发同一个项目,很多情况下配置完后发现程序根本不能运行,找来找去也没有发现在几到底错在哪里,直到后来才发现就是在编译程序的时候lib文件在做怪。那么lib文件是如何作怪的呢?


本文中以OpenCV2.4.9的配置来举例,我们都知道按照网上的教程在配置OpenCV的时候都会有一步就是在工程的连接器-》输入中添加OpenCV的所有lib文件,然而lib文件分为两种,一种是带字母d的debug版本,另一种是不带字母d的release版本,一般教程都会要求我们将所有lib文件全部添加进去,如下图所示:


由于把debug版本的(带d的)lib文件放在了前面,所以后面的release版本lib文件从来都不会起到任何作用,所以程序智能运行debug模式,在release模式下不能运行,同理将release版本lib文件放在前面,debug的lib文件就不会起作用,就只能运行release模式,而不能运行debug模式。那么如果我们想要一劳永逸的来解决这个问题,随时在Debug与Release版本之间切换,而不用这么麻烦频繁的修改连接器-》输入中的lib名称,该如何做呢?


最好的方法就是自己写一个文件来手动的编译这些lib文件。

建一个文件opencv_lib.h

文件内容如下:

#ifndef _OPENCV_LIB_
#define _OPENCV_LIB_

#ifdef _DEBUG

#pragma comment(lib, "opencv_calib3d249d.lib")
#pragma comment(lib, "opencv_contrib249d.lib")
#pragma comment(lib, "opencv_core249d.lib")
#pragma comment(lib, "opencv_features2d249d.lib")
#pragma comment(lib, "opencv_flann249d.lib")
#pragma comment(lib, "opencv_gpu249d.lib")
#pragma comment(lib, "opencv_highgui249d.lib")
#pragma comment(lib, "opencv_imgproc249d.lib")
#pragma comment(lib, "opencv_legacy249d.lib")
#pragma comment(lib, "opencv_ml249d.lib")
#pragma comment(lib, "opencv_nonfree249d.lib")
#pragma comment(lib, "opencv_objdetect249d.lib")
#pragma comment(lib, "opencv_ocl249d.lib")
#pragma comment(lib, "opencv_photo249d.lib")
#pragma comment(lib, "opencv_stitching249d.lib")
#pragma comment(lib, "opencv_superres249d.lib")
#pragma comment(lib, "opencv_ts249d.lib")
#pragma comment(lib, "opencv_video249d.lib")
#pragma comment(lib, "opencv_videostab249d.lib")

#else


#pragma comment(lib, "opencv_calib3d249.lib")
#pragma comment(lib, "opencv_contrib249.lib")
#pragma comment(lib, "opencv_core249.lib")
#pragma comment(lib, "opencv_features2d249.lib")
#pragma comment(lib, "opencv_flann249.lib")
#pragma comment(lib, "opencv_gpu249.lib")
#pragma comment(lib, "opencv_highgui249.lib")
#pragma comment(lib, "opencv_imgproc249.lib")
#pragma comment(lib, "opencv_legacy249.lib")
#pragma comment(lib, "opencv_ml249.lib")
#pragma comment(lib, "opencv_nonfree249.lib")
#pragma comment(lib, "opencv_objdetect249.lib")
#pragma comment(lib, "opencv_ocl249.lib")
#pragma comment(lib, "opencv_photo249.lib")
#pragma comment(lib, "opencv_stitching249.lib")
#pragma comment(lib, "opencv_superres249.lib")
#pragma comment(lib, "opencv_ts249.lib")
#pragma comment(lib, "opencv_video249.lib")
#pragma comment(lib, "opencv_videostab249.lib")

#endif

#endif

把这个文件放在OpenCV安装目录的include目录下,这样每次在写OpenCV工程的时候就添加上头文件#include<opencv_lib.h>就Ok啦。如果想要偷懒,不妨将这句话写入到opencv.hpp文件中,每次工程头文件只需要包含#include<opencv2/opencv.hpp>就全部搞定,连其他头文件也都不用写了,因为opencv.hpp文件中基本上包含了opencv所有的头文件。


但是请注意,如果要这样做,一定要记得不能再连接器-》输入中添加任何opencv2.4.9的debug或者release版本的lib,这样做会是的前面的工作都全部失效。(就只需要修改这一个地方,其他的opencv配置完全不做任何变化哦)


通过上述方法,就可以在在Debug与Release版本之前切换自如,而不抱任何错误啦!其他类似的开发库配置与此类似。

猜你喜欢

转载自blog.csdn.net/liuzubing/article/details/78957982