Использование Openmp 4/5 в Visual Studio 2019 с использованием clang-cl - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь запустить простой проект с OpenMP. Поскольку Visual Studio поддерживает только OpenMP 2, поэтому я пытаюсь скомпилировать и запустить проект с использованием LLVM clang-cl, поставляемого с Visual Studio 2019. Компиляция выглядит нормально, но на этапе компоновки компоновщик не может разрешить функции OMP.

Это мой код, есть только 1 файл:

#include <stdio.h>

void fn() {
    #pragma omp parallel num_threads(5)
    {
        int i;
        #pragma omp task depend(in : i)
        for (i = 0; i < 1; i++) {
            printf("task\n");
        }
    }
}

int main() {
    printf("hello\n");
    fn();
}

Свойства моего проекта Visual Studio:

  • Windows SDK version: 10.0 (последняя установленная версия ) (10.0.18362.0)
  • Platform toolset: LLVM (clang-cl)
  • C/c++ - Command Line - Additional Options: /Zc:twoPhase- -Xclang -fopenmp -v
  • Linker - Additional Dependencies: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\Llvm\lib\libomp.lib и C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\Llvm\lib\libiomp5md.lib
  • Linker - Additional Library Directories: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\Llvm\lib
  • Linker - Command Lines - Additional Options: -fopenmp -verbose

Журнал ошибок при запуске проекта

1>lld-link : error : undefined symbol: __kmpc_global_thread_num
1>>>> referenced by D:\Repositories\Test-clang\Test-clang\Source.cpp:4
1>>>>               x64\Debug\Source.obj:(void __cdecl fn(void))
1>
1>lld-link : error : undefined symbol: __kmpc_push_num_threads
1>>>> referenced by D:\Repositories\Test-clang\Test-clang\Source.cpp:7
1>>>>               x64\Debug\Source.obj:(void __cdecl fn(void))
1>
1>lld-link : error : undefined symbol: __kmpc_fork_call
1>>>> referenced by D:\Repositories\Test-clang\Test-clang\Source.cpp:7
1>>>>               x64\Debug\Source.obj:(void __cdecl fn(void))
1>
1>lld-link : error : undefined symbol: __kmpc_omp_task_alloc
1>>>> referenced by D:\Repositories\Test-clang\Test-clang\Source.cpp:10
1>>>>               x64\Debug\Source.obj:(.omp_outlined._debug__)
1>
1>lld-link : error : undefined symbol: __kmpc_omp_task_with_deps
1>>>> referenced by D:\Repositories\Test-clang\Test-clang\Source.cpp:10
1>>>>               x64\Debug\Source.obj:(.omp_outlined._debug__)
1>Done building project "Test-clang.vcxproj" -- FAILED.

Я использую Visual Studio Community 2019. Так как мне настроить проект для работы OpenMP?


Я также попытался скомпилировать, как в этом ответе , и это работает.

clang -fopenmp -o Source.obj -c Source.cpp
clang -fopenmp -o Source.exe Source.obj

Это работает и для clang-cl

clang-cl -Xclang -fopenmp -o Source.obj -c Source.cpp
clang-cl /clang:-fopenmp -o Source.exe Source.obj -v

Но я не знаю, как заставить Visual Studio построить проект, используя описанный выше способ.

1 Ответ

0 голосов
/ 17 февраля 2020

Вы добавили библиотеку в зависимости вашего проекта? enter image description here

...