首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows环境下OpenMP代码的LLVM / Clang 8编译

Windows环境下OpenMP代码的LLVM / Clang 8编译
EN

Stack Overflow用户
提问于 2019-05-03 20:09:13
回答 2查看 1.6K关注 0票数 4

我在Windows下使用嘎吱声 (LLVM) 8的Windows版本。

我正在编译一个使用OpenMP的代码。

在Clang的lib文件夹下有两个与OpenMP相关的文件:

  1. libomp.lib
  2. libiomp5md.dll

我的问题是:

  1. 在编译代码时,我使用了编译器的标志-Xclang -fopenmp。在GCC和ICC中,使用标志告诉编译器自动链接OpenMP库。那Clang呢?它是自动的还是必须手动链接到libomp.lib?有办法触发到OpenMP库的自动链接吗? 答案:这是在迈克尔·克伦姆回答如下中回答的--使用clang驱动程序编译和链接,然后-fopenmp将与GCC一样工作。
  2. 当我手动链接到libomp.lib (定义为链接器的库)时,输出exe需要libomp.dll,而提供的OpenMP动态库是libiomp5md.dll。那是错误还是因为我手动链接? 应答libomp.dll是在bin文件夹中提供的,而不是lib文件夹中提供的。
  3. 在Windows环境下,在Clang中使用OpenMP的正确方法是什么?clang-cl驱动程序不使用/openmp-openmp作为MSVC的cl编译器。 答案:目前可以使用clang -fopenmp ...clang-cl -Xclang -fopenmp ...clang-cl /clang:-fopenmp ... (相当于-Xclang -fopenmp)来完成。

备注

在Windows上,我使用clang-cl使用Clang的Windows驱动程序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-04 10:04:05

要在Windows上编译和链接OpenMP代码,您必须将-fopenmp传递给编译器和链接器:

代码语言:javascript
复制
clang -fopenmp -o bla.obj -c bla.c
clang -fopenmp -o bla.exe bla.obj
票数 1
EN

Stack Overflow用户

发布于 2022-02-25 04:03:26

clang-cl 使OpenMP库的实际内容更加清晰,以及如何在上使用这些库

libomp.dll和libiomp5md.dll是相同的文件!

在为Windows编译时,您可以针对libomp.liblibiomp5md.lib进行链接,后者将在运行时链接到同名DLL,即libomp.dlllibiomp5md.dll

如果加载两个使用“异名DLL”的文件,解释器将崩溃,并给出一个严重错误,例如:OMP: error #15:初始化libiomp5md.dll,但发现libomp.dll已初始化.

为什么?因为程序不知道它们是同一个DLL,所以它们有不同的名称,所以假设它们是不同的。然后它就坠毁了。仅出于这个原因,您可以选择在程序中交换链接到的OpenMP DLL。

如果您的程序没有崩溃并给您一个错误,您可以继续使用相同的链接到OpenMP。否则,若要关闭错误,请链接到已由另一个程序加载的错误。

如果使用clang-cl.exe (它是MSVC cl.exe的“插入"Clang替换),则应该传递一个编译器参数(如-Xclang -fopenmp ),该参数将把参数转换为”Clang语言“。不要忘记仍然传递给链接器您选择的OpenMP LIB,因为在Windows上,它不会是自动的。

这就是我所了解到的关于OpenMP在Windows上链接的尽可能简单的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55976484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档