標籤:

靜態庫編譯

靜態庫編譯參考 http://bbs.csdn.net/topics/390485359/

參見 Test3213項目

VC6:工程、設置、C/C++、分類:Preprocessor、附加包含路徑:填寫附加頭文件所在目錄逗號間隔多項工程、設置、Link、分類:Input、附加庫路徑:填寫附加依賴庫所在目錄分號間隔多項工程、設置、Link、分類:Input、對象/庫模塊:填寫附加依賴庫的名字.lib空格間隔多項VS20xx:項目、屬性、C/C++、附加包含目錄:填寫附加頭文件所在目錄分號間隔多項項目、屬性、鏈接器、常規、附加庫目錄:填寫附加依賴庫所在目錄分號間隔多項項目、屬性、鏈接器、輸入、附加依賴項:填寫附加依賴庫的名字.lib空格或分號間隔多項

附加依賴項添加IlmImfd.lib

1.1 讓opencv程序在沒有安裝opencv的電腦上運行

參考 http://www.cnblogs.com/vincent2012/p/3369427.html

  經常需要把用opencv寫的程序拿到沒有裝opencv的電腦上去運行和演示,要讓opencv程序脫離opencv環境,一般有兩種方法:

  一種是動態鏈接opencv,即把相應的dll拷貝到exe所在目錄,然後一起拿到目標電腦上去運行;另一種是將相應dll中的函數打包進exe,然後直接拷貝exe到目標電腦上去運行,即靜態編譯。

  這裡以VS2008+opencv2.4.6編寫的win32控制台程序為例介紹靜態編譯的步驟:

  1. 將opencv安裝目錄uild下的include文件夾拷貝到當前工程目錄下,重命名為opencv_include;

  2. 將opencv安裝目錄uildx86vc9下的staticlib文件夾拷貝到當前工程目錄下,重命名為opencv_lib;

  

  3. 在VS左側的目錄樹中右鍵項目名稱,選擇「屬性」,在「配置屬性」->「C/C++」->「常規」->「附加包含目錄」中添加opencv_include目錄。

  

  4. 在「連接器」->「輸入」->「附加依賴項」里添加相應的lib文件,debug版添加帶d的lib,release版添加不帶d的lib。

  

 

  //win32控制台程序需要的lib  vfw32.lib  comctl32.lib

  //opencv用到的第三方lib  .opencv_liblibjasperd.lib   .opencv_liblibjpegd.lib   .opencv_liblibpngd.lib   .opencv_liblibtiffd.lib .opencv_libzlibd.lib

  //opencv各模塊的lib  .opencv_libopencv_calib3d246d.lib   .opencv_libopencv_contrib246d.lib   .opencv_libopencv_core246d.lib   .opencv_libopencv_features2d246d.lib   .opencv_libopencv_flann246d.lib   .opencv_libopencv_gpu246d.lib   .opencv_libopencv_haartraining_engined.lib   .opencv_libopencv_highgui246d.lib   .opencv_libopencv_imgproc246d.lib   .opencv_libopencv_legacy246d.lib   .opencv_libopencv_ml246d.lib   .opencv_libopencv_nonfree246d.lib   .opencv_libopencv_objdetect246d.lib   .opencv_libopencv_photo246d.lib   .opencv_libopencv_stitching246d.lib   .opencv_libopencv_ts246d.lib   .opencv_libopencv_video246d.lib   .opencv_libopencv_videostab246d.lib

  5. 在「C/C++」->「代碼生成」->「運行時庫」中,debug版選擇MTd,release版選擇MT。

  

  以上設置完成後,編譯即可。

  PS:

  1. 通常include和lib還可以在VS2008的「工具」->「選項」->「項目和解決方案」->「VC++目錄」的「包含文件」中 進行設置,但這樣的設置是保存在VS2008中,而不是當前工程中,如果將整個工程拷貝到別的電腦上,還需要再次設置才能正確編譯。而這裡介紹的方式則不用再配置,可以直接修改和編譯。

  2. 這裡使用了相對路徑,其中「.」表示當前目錄,「..」表示當前目錄的上級目錄。

  3. opencv早一點的版本中可能並沒有包含已經編譯好的lib,所以需要自己編譯。

  4. 在使用opencv讀avi文件時,發現cvCreateFileCapture總是返回空指針,研究半天才發現是因為 opencv_ffmpeg.dll沒有正確載入。opencv_ffmpeg.dll並沒有相應的lib,所以仍然需要將該dll拷貝至工程目錄下編譯 和運行。


推薦閱讀:

TarvisCI 全流程使用實踐(一)
2011 阿拉伯之春【普羅編譯】
經略編譯 | 怒從何來?「劍橋分析」與我們的時代
俞可平@中央編譯出版社的109本書
獨家編譯 | 五千年歷史耶路撒冷 到底是誰的「首都」?

TAG:編譯 |