2012-03-19 125 views
5

我一直在努力編譯openCV程序。我嘗試了所有我可能在互聯網上找到的東西。使用MinGW在Windows 7 64位編譯openCV 2.3.1程序gcc/g ++

我所做的是:我已經下載了OpenCV-2.3.1-win-superpack.exe並遵循this official installation guide

在CMake(gui)我的源代碼是:D:\ opencv並且構建目標是:C:\ opencv。

我也爲我的系統的PATH變量添加了C:\ opencv \ install \ bin; C:\ opencv \ bin。

我想要的是在我的Windows操作系統上使用MinGW的gcc/g ++編譯器編譯openCV程序。

我已經嘗試了各種在互聯網上找到的gcc/g ++參數,以及玩-I和-L選項的日子,編譯器無法找到openCV函數或結構。

我試圖編譯:

#include <stdlib.h> 
#include <stdio.h> 
#include <math.h> 
#include <cv.h> 
#include <highgui.h> 

int main(int argc, char *argv[]) 
{ 
    // Nothing but create a window 
    cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); 
    cvMoveWindow("mainWin", 100, 100); 
    cvWaitKey(0); 
    return 0; 
} 

錯誤:

輸入

gcc test.c -o test -I"C:\opencv\install\include" -I"C:\opencv\install\include\opencv" -L"C:\opencv\install\bin" 

輸出

...\ccK4MfHv.o:test.c:(.text+0xa0b): undefined reference to `cvFree_' 

或用G ++:

輸入

g++ test.c -o test -I"C:\opencv\install\include" -I"C:\opencv\install\include\opencv" -L"C:\opencv\install\bin" 

輸出

...\ccXCTKa1.o:test.c:(.text+0x1e): undefined reference to `cvNamedWindow' 

邊注:試圖編譯VS2005中,我得到了同樣的錯誤。

謝謝你的時間!

回答

0

您有目錄C:\opencv\install\bin來查找gcc/g++命令行上的庫,但我認爲您還需要指定庫以用作鏈接器輸入。我不知道是什麼庫是OpenCV的發行版的一部分,但你鏈接到指令頁面上的例子去,一個可能是:

-lopencv_calib3d220.dll 

你可能需要增加一個或多個其他(其名稱格式lib*.aC:\opencv\install\bin目錄中 - 或者其他lib目錄,您應該通過-L選項傳遞)。

+0

對不起,延遲。我已經嘗試了一切,但它仍然不會編譯。我已經轉移到Python而不是C/C++,現在一切正常。感謝您的建議思想! – 2012-03-26 16:58:53

5

如果別人需要解決這個問題,這裏就是我得到了張貼的OpenCV/HighGUI示例代碼在Windows中編譯使用的MinGW,MSYS和CMake的7 x64系統:從源

  1. 構建的OpenCV使用MinGW/MSYS/CMake。這是因爲我無法在MinGW/MSYS/Windows 7 x64中使OpenCV-win-SuperPack中的MinGW編譯版本正確鏈接。

    對於全參考,以下是我編的OpenCV:

    • 確保你有一個上最新的CMake(V2.6或更高版本)和MinGW(與GCC,G ++,和MSYS選項)安裝
    • 如果你想要新的基於Qt的OpenCV HighGUI前端,你需要安裝Qt 4(SDK)。
    • 下載的OpenCV源/ superpack版本2.2或更高版本(我使用的OpenCV-2.3.1贏-superpack.exe)
    • 解壓到[OPENCV_SOURCE_DIR](I把它在C:/ OpenCV的,所以有應在℃的文件:例如/ OpenCV的/自述)
    • 別處創建[OPENCV_BUILD_DIR]目錄(I使用C:/ OpenCV的/生成/ MinGW的)
    • 使用的CMake的GUI工具,指定源目錄作爲[OPENCV_SOURCE_DIR],構建目錄爲[OPENCV_BUILD_DIR],然後單擊「配置」。您可能希望/需要調整選項(例如,我勾選「Qt」和「Qt-OpenGL」條目,然後再次單擊「配置」,然後必須提供qmake可執行文件的路徑)
    • 一次配置完OpenCV的,請在一個MSYS終端「生成」
    • ,瀏覽到[OPENCV_BUILD_DIR],並運行「make」來構建代碼(這可能需要一段時間)
    • 一旦已經正確建立,運行「make install」,它會將構建的代碼/庫/包括目錄收集到[OPENCV_BUILD_DIR] /安裝文件夾中(如果在使用CMake-GUI工具時更改了相應選項,則爲其他文件夾)
    • 將[OPENCV_BUILD_DIR]/install/bin文件夾添加到PATH環境變量中。如果你不知道如何做到這一點,那麼我建議使用路徑編輯器GUI工具。
    • 如果您最終使用Qt,您還需要將Qt SDK的bin文件夾放入PATH環境變量中。這是包含qmake.exe的文件夾。
  2. 將以下示例代碼放入名爲test.c的文件中。我稍微修改了包含,以使它們與OpenCV v2.2及更高版本兼容。

    #include <stdlib.h> 
    #include <stdio.h> 
    #include <math.h> 
    #include <opencv/cv.h> 
    #include <opencv/highgui.h> 
    
    int main(int argc, char *argv[]) 
    { 
        // Nothing but create a window 
        cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); 
        cvMoveWindow("mainWin", 100, 100); 
        cvWaitKey(0); 
        return 0; 
    } 
    
  3. 在MSYS終端

    ,瀏覽到你把test.c的文件夾,然後運行:

    gcc -o test -I"[OPENCV_BUILD_DIR]/install/include" test.c \ 
        -L"[OPENCV_BUILD_DIR]/install/lib" \ 
        -lopencv_core[OPENCV_VERSION] \ 
        -lopencv_imgproc[OPENCV_VERSION] \ 
        -lopencv_highgui[OPENCV_VERSION] 
    

    所以在我的情況:

    gcc -o test -I"/c/opencv/build/mingw/install/include" test.c \ 
        -L"/c/opencv/build/mingw/install/lib" \ 
        -lopencv_core231 
        -lopencv_imgproc231 
        -lopencv_highgui231 
    

路徑編輯:http://www.redfernplace.com/software-projects/patheditor/

+0

Linux用戶注意事項。 OpenCV的新版本可能會在您的回購庫中找到,可能不需要下載源代碼並進行製作。我的編譯命令如下:'gcc main.c -lopencv_core -lopencv_imgproc -lopencv_highgui -lm'。如您所見,不需要尾隨數字。 – 2012-04-25 11:10:52

+0

OME步驟丟失:在CMake中應該在配置期間選擇什麼? MSYS Makefiles? MinGW Makefiles? – 2013-06-30 10:47:05

相關問題