CMake - 允许 mingw 与 OpenMP 和 opencv

问题描述 投票:0回答:0

我尝试建立一个 C++ 环境来处理图像(使用 opencv)和并行计算。主要问题是我无法成功地将所有部分链接在一起。值得一提的是,我从控制台(windows cmd)使用 mingw,而不是从 IDE

我现在做了什么:

  • 我在系统Path变量中添加了mingw bin;如果我在 cmd 上运行 gcc cplusplus.cpp -o ccc -fopenmp -lstdc++,它工作正常(在 cplusplus.cpp 文件中使用#include

现在用于 CMake 和 opencv:

  • 我将 CMake bin 添加到系统 Path 变量
  • 我在系统Path变量中添加了\opencv uild\x64 c16\lib和\opencv uild\x64 c16

现在,我想当我尝试用 CMake 构建 mingw 时出现问题。 这是 C++ 文件:

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
#include <omp.h>
using namespace std;
int main() {
    #pragma omp parallel
    {
    int d = omp_get_thread_num();
    cout<<d<<" Hello world"<<endl;
    }
    return 0;
}

这是CMakeLists.txt:

cmake_minimum_required(VERSION 3.0)
project(OpenCV_cpp)

find_package(OpenCV REQUIRED)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")


include_directories(${OpenCV_INCLUDE-DIRECTORIES})
add_executable(display_image cplusplus.cpp)

target_link_libraries(display_image ${OpenCV_LIBS})

在命令中:cmake 。 -G "MinGW Makefiles" 工作正常(结束时没有错误)。但是如果我运行 mingw32-make.exe 我得到错误:

[ 50%] 链接 CXX 可执行文件 display_image.exe d:/winlibs-x86_64-posix-seh-gcc-12.2.0-llvm-15.0.7-mingw-w64ucrt-10.0.0-r4/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/ 12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\display_image.dir/objects.a(cplusplus.cpp.obj):cplusplus.cpp:( .text+0xe): 未定义引用 'omp_get_thread_num'

collect2.exe:错误:ld 返回 1 退出状态 mingw32-make[2]: *** [CMakeFiles\display_image.dir uild.make:115: display_image.exe] 错误 1 mingw32-make[1]: *** [CMakeFiles\Makefile2:82: CMakeFiles/display_image.dir/all] 错误 2 mingw32-make: *** [makefile:90: all] 错误 2

从报错可以看出,问题与openMP有关。我该如何解决这个问题?

c++ gcc cmake mingw openmp
© www.soinside.com 2019 - 2024. All rights reserved.