2011-11-13 146 views
3

我正在嘗試使用OpenCV庫編寫一個C++應用程序。根據OpenCV維護人員的建議,我使用CMake生成Makefile。我的平臺是Windows 7(64位)。我的編譯器是MinGW(所以我使用'mingw32-make'工具來構建應用程序)。包括OpenCV庫DLL與CMake

現在我試圖確保我的設置是正確的,所以我可以繼續前進的代碼。我已經驗證OpenCV庫已經正確構建。然後我試圖驗證我可以使用CMake在我的版本中包含OpenCV庫。我使用以下示例代碼從OpenCV的教程:

DisplayImage.cpp

#include <cv.h> 
#include <highgui.h> 

using namespace cv; 

int main(int argc, char** argv) 
{ 
    Mat image; 
    image = imread(argv[1], 1); 

    if (argc != 2 || !image.data) 
    { 
     printf("No image data \n"); 
     return -1; 
    } 

    namedWindow("Display Image", CV_WINDOW_AUTOSIZE); 
    imshow("Display Image", image); 

    waitKey(0); 

    return 0; 
} 

的CMakeLists.txt

cmake_minimum_required(VERSION 2.8) 

project(DisplayImage) 
find_package(OpenCV REQUIRED) 
add_executable(DisplayImage DisplayImage) 
target_link_libraries(DisplayImage ${OpenCV_LIBS}) 

我使用的cmake桂以產生生成文件,然後用於mingw32-使建立應用程序。一切工作正常,程序編譯沒有錯誤。但是,當我嘗試運行它時,Windows停止並抱怨它需要libopencv_core231.dll。我檢查了這個DLL在我的(OpenCV Build location)/ bin目錄中。如何在編譯時讓CMake/MinGW包含此內容?

回答

3

將opencv dll複製到您的可執行文件夾中。

MACRO (COPY_DLL trgt libname) 
     ADD_CUSTOM_COMMAND (
     TARGET ${trgt} 
     POST_BUILD 
     COMMAND ${CMAKE_COMMAND} 
     ARGS -E copy "${OPENCVDIR/bin}/${libname}.dll" ${CMAKE_CURRENT_BINARY_DIR} 
    ) 
ENDMACRO (COPY_DLL) 
+1

是不是CMake應該包括我的dll的目錄,所以我不必將它們複製到每個可執行文件夾? – astay13

+0

這不是CMakes的問題。操作系統正在搜索所需的dll。 – neagoegab

+1

是的,但不是CMake應該告訴可執行文件它可以找到它們的位置嗎? – astay13