我已经使用cygwin下载了openMP,我在CLION中将其用作编译器。
我包括了
#include <omp.h>
并使用了其模式,例如
#pragma omp paraller
#pragma omp single
但是当我使用omp_get_max_threads()
时会抛出
对“ omp_get_max_threads”的未定义引用
但是错误仍然相同。有没有办法解决这个问题?感谢您的帮助。
答案 0 :(得分:0)
CLion 使用 CMake 作为构建系统,在 CMake 3.9 + 中大大改善了 OpenMP 支持。现在,您需要按以下步骤配置 CMakeLists.txt 文件:
例如,考虑下面的示例代码。
#include <iostream>
#include <omp.h>
int main()
{
#pragma omp parallel num_threads(3)
{
int id = omp_get_thread_num();
std::cout << "Greetings from process " << id << std::endl;
}
std::cout << "parallel for ends " << std::endl;
return EXIT_SUCCESS;
}
CMakeLists.txt
文件将类似于:
cmake_minimum_required(VERSION 3.9)
project(openmp_test) # you can change the project name
find_package(OpenMP)
add_executable(openmp_para_test main.cpp)
if(OpenMP_CXX_FOUND)
target_link_libraries(openmp_para_test PUBLIC OpenMP::OpenMP_CXX)
endif()
如果您不熟悉CMake,请Here a quick CMake tutorial to use with CLion。
答案 1 :(得分:0)
我不是CLION的用户,但是程序自变量确实是编译器为您编译的代码提供的自变量吗?
通常,在编译OpenMP源文件时,-fopenmp
标志需要同时添加到编译器和链接器中。因此,例如:
gcc -fopenmp -c foo.c -o foo.o
gcc -fopenmp -c bar.c -o bar.o
gcc -fopenmp -o app.exe foo.o bar.o
或者,如果您仅使用一个源文件就可以进行链接和使用:
gcc -fopenmp -c fooc -o app.exe
PS:有一个错字,应该是#pragma omp parallel
而不是#pragma omp paraller
。