2017-10-08 27 views
0

j'apprends l'informatique parallèle et ont commencé mon voyage avec OpenMP et C.Clion et OpenMP

J'ai Clion configure, mais pas de chance.

#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"); 

}

Mais je reçois cette erreur:

En fonction main': C:/Users/John/CLionProjects/Parallelexamples/main.c:6: undefined reference to omp_get_num_threads de C: /Users/John/CLionProjects/Parallelexamples/main.c: 7: undefined reference to ` omp_get_thread_num ' collect2.exe: erreur: ld a renvoyé 1 état de sortie mingw32-make.exe [2]: * [Parallelexamples.exe] Erreur 1 CMakeFiles \ Parallelexamples.dir \ build.make: 95: recette pour la cible' Parallelexamples.exe ' échec mingw32-make.exe [1]: * [CMakeFiles/Parallelexamples.dir/all] Erreur 2 CMakeFiles \ Makefile2: 66: recette pour la cible 'CMakeFiles/Parallelexamples.dir/all' a échoué Makefile: 82: recette pour cible 'tous' a échoué mingw32-make.exe: *** [tous] erreur 2

J'ai suivi les instructions et fait mes fichiers CMakeListtxt comme ceci:

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}) 

ai-je raté quelque chose?

Répondre

3

Tout d'abord, puisque vous utilisez CMake, profitez de la FindOpenMP macro: https://cmake.org/cmake/help/latest/module/FindOpenMP.html

cmake_minimum_required(VERSION 3.8) 
project(Parallelexamples) 

En second lieu, il semble que vous n'êtes pas liaison avec la bibliothèque d'exécution OpenMP. Non seulement vous devez passer les drapeaux de compilation openmp, vous devez également passer le drapeau de linker correct (s):

set_target_properties(Parallelexamples LINK_FLAGS "${OpenMP_CXX_FLAGS}") 

Et comme sidenote, si vous êtes vraiment programmation avec C pas C++, vous aurez pas besoin CXX_FLAGS vous pouvez simplement utiliser C_FLAGS