我正在学习并行计算,并已经开始了我的旅程与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/Parallelexamples/main.C:7:对“omp_get_thread_num”的未定义引用
Cuxe2.EXE:错误:LD返回1退出状态
mingw32 make.exe[2]:*[Parallelexamples.exe]错误1
CMakeFiles\Parallelexamples.dir\build.make:95:目标'Parallelexamples.exe'的配方失败
mingw32 make.exe[1]:*[CMakeFiles/Parallelexamples.dir/all]错误2
CMakeFiles\Makefile2:66:目标“CMakeFiles/Parallelexamples.dir/all”的配方失败
Makefile:82:目标“all”的配方失败
mingw32-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})
我错过什么了吗?
最佳答案
首先,由于您使用的是CMake,请利用FindOpenMP
宏:https://cmake.org/cmake/help/latest/module/FindOpenMP.html
cmake_minimum_required(VERSION 3.8)
project(Parallelexamples)
其次,您似乎没有链接到OpenMP运行时库。不仅必须传递编译标志,还必须传递正确的链接器标志:
set_target_properties(Parallelexamples LINK_FLAGS "${OpenMP_CXX_FLAGS}")
作为一个旁侧,如果你真的用C而不是C++编程,你就不需要
openmp
你可以使用CXX_FLAGS