解決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版本之前切換自如,而不抱任何錯誤啦!其他類似的開發庫配置與此類似。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章