Clion和OpenMP

pkln4tw6  于 2023-10-16  发布在  其他
关注(0)|答案(2)|浏览(170)

我正在学习并行计算,并开始了我的旅程与OpenMP和C。
我一直在配置Clion,但没有运气。

#include <stdio.h>
#include <omp.h>

int main() {
    #pragma omp parallel
{ 
   int n = omp_get_num_threads();
   int tid = omp_get_thread_num();
    printf("There are %d threads. Hello from thread %d\n", n, tid);
};

/*end of parallel section */
printf("Hello from the master thread\n");

}
但我得到这个错误:
在函数main': C:/Users/John/CLionProjects/Parallelexamples/main.c:6: undefined reference to omp_get_num_threads' C:/Users/John/CLionProjects/Cableexamples/main.c:7中:未定义对“omp_get_thread_num”collect2.exe的引用:错误:ld返回1退出状态mingw 32-make.exe[2]:* [xmlexamples.exe]错误1 CMakeFiles\xmlexamples.dir\build.make:95:目标'mingelexamples.exe'的配方失败mingw 32-make.exe[1]:* [CMakeFiles/Cmaelexamples.dir/all]错误2 CMakeFiles\Makefile2:66:目标“CMakeFiles/CMaelexamples.dir/all”的配方失败Makefile:82:目标“all”的配方失败mingw 32-make.exe:* [all]错误2
我已经按照指示,使我的CMakeListtxt文件如下:

cmake_minimum_required(VERSION 3.8)
project(Parallelexamples)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu11 -fopenmp")

set(SOURCE_FILES main.c)
add_executable(Parallelexamples ${SOURCE_FILES})

我错过了什么吗?

cpjpxq1n

cpjpxq1n1#

首先,因为你使用的是CMake,所以要利用FindOpenMP宏:https://cmake.org/cmake/help/latest/module/FindOpenMP.html

cmake_minimum_required(VERSION 3.8)
project(Parallelexamples)

其次,您似乎没有链接到OpenMP运行时库。不仅要传递openmp编译标志,还必须传递正确的链接器标志:

set_target_properties(Parallelexamples LINK_FLAGS "${OpenMP_CXX_FLAGS}")

顺便说一下,如果你真的是用C而不是C++编程,你不需要CXX_FLAGS,你可以使用C_FLAGS

6ovsh4lw

6ovsh4lw2#

在现代CMake中,您应该使用OpenMP's imported targets

cmake_minimum_required(VERSION 3.14)
project(Parallelexamples LANGUAGES C)

find_project(OpenMP REQUIRED)

add_executable(Parallelexamples main.c)
target_link_libraries(Parallelexamples PRIVATE OpenMP::OpenMP_C)

相关问题