2016-11-10 19 views
5

Tôi đang cố chạy chương trình OpenMP đơn giản trong CLion IDE. Khi tôi chạy nó tôi nhận được một ERROR:Cách thiết lập dự án openMP cơ bản trong CLion

CMakeFiles\openmp_test_clion.dir/objects.a(main.cpp.obj): In function `main': 
D:/.../openmp_test_clion/main.cpp:9: undefined reference to 'omp_get_thread_num' 
collect2.exe: error: ld returned 1 exit status 

Dưới đây là mã của tôi:

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

int main() 
{ 
    int id; 
#pragma omp parallel private(id) 
    { 
     id = omp_get_thread_num(); 
     printf("%d: Hello World!\n", id); 
    } 
    return 0; 
} 

Đây là tôi CMakeLists.txt:

cmake_minimum_required(VERSION 3.6) 
project(openmp_test_clion) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

set(SOURCE_FILES main.cpp) 
add_executable(openmp_test_clion ${SOURCE_FILES}) 

message(STATUS "Checking OpenMP") 
find_package(OpenMP) 
IF(OPENMP_FOUND) 
    message("Found OpenMP!) 
    # add flags for OpenMP 
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") 
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") 
    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${OpenMP_SHARED_LINKER_FLAGS}") 
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") 
ELSE() 
    message("Missed OpenMP!") 
ENDIF() 

Dưới đây là màn hình của dãy công cụ của tôi: enter image description here

Tôi có không có kinh nghiệm với OpenMP và tôi là lập trình viên mới bắt đầu ở C++ vì vậy hãy cho tôi một chút giải thích cách thiết lập dự án của tôi.

Trả lời

4

Vì vậy, sau một thời gian tôi đã tìm ra. Tôi đã thay đổi CmakeLists.txt như sau:

cmake_minimum_required(VERSION 3.6) 
project(openmp_test_clion) 

# added -fopenmp 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fopenmp") 

set(SOURCE_FILES main.cpp) 
add_executable(openmp_test_clion ${SOURCE_FILES}) 

Và tôi cần cài đặt openmp qua TDM-GCC installer.

+0

[Câu trả lời] (https://stackoverflow.com/a/12404666/1662425) cho thấy thiết lập tốt hơn hỗ trợ nhiều trình biên dịch, thay vì mã hóa cứng cờ gcc. – tera

Các vấn đề liên quan