在 CMake 中包含 OpenCV 库 dll

ast*_*y13 5 c++ dll opencv mingw cmake

我正在尝试使用 OpenCV 库编写 C++ 应用程序。根据 OpenCV 维护者的建议,我使用 CMake 生成 Makefile。我的平台是 Windows 7(64 位)。我的编译器是 MinGW(所以我使用 'mingw32-make' 工具来构建应用程序)。

现在我正在尝试确保我的设置正确,以便我可以继续编写代码。我已验证 OpenCV 库已正确构建。然后我尝试验证我是否可以使用 CMake 在我的构建中包含 OpenCV 库。我正在使用 OpenCV 教程中的以下示例代码:

显示图像.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;
}
Run Code Online (Sandbox Code Playgroud)

CMakeLists.txt

cmake_minimum_required( VERSION 2.8 )

project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
Run Code Online (Sandbox Code Playgroud)

我使用 cmake-gui 生成 Makefile,然后使用 mingw32-make 构建应用程序。一切正常,程序编译没有错误。但是,当我尝试运行它时,Windows 停止并抱怨它需要 libopencv_core231.dll。我已经检查过,这个 dll 位于我的(OpenCV 构建位置)/bin 目录中。编译时如何让 CMake/MinGW 包含它?

nea*_*gab 5

将 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)
Run Code Online (Sandbox Code Playgroud)

  • CMake 是不是应该为我包含带有 dll 的目录,这样我就不必将它们复制到每个可执行文件夹中? (2认同)