1. 程式人生 > >解決VS中Debug與Release版本切換的問題

解決VS中Debug與Release版本切換的問題

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