c++ - 将 OpenMP 与 clang 一起使用

标签 c++ c clang openmp

我在使用 clang(3.6 和 3.8 ToT)编译 OpenMP 代码时遇到问题。

我关注了这篇博文 http://blog.llvm.org/2015/05/openmp-support_22.html ,但问题是编译后的程序只在一个线程上执行。 我使用的是 ubuntu 15.04 x64,我同时安装了 libgomp 和 libiopmp,并使用以下命令编译我的代码:

clang test.c -o test -fopenmp -L/usr/lib/gcc/x86_64-linux-gnu/5.1.1

当我改用 gcc 时,一切正常:gcc test.c -o test -fopenmp

我也尝试运行 export LD_LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/5.1.1:$LD_LIBRARY_PATH 但没有帮助。 `

有什么建议吗?

最佳答案

一些补充意见:

1) 您需要使用 -fopenmp=libomp 在 clang 中启用 OpenMP。 -fopenmp 仅链接 libgomp 但忽略所有编译指示。很奇怪,我知道——很快就会在后备箱里换掉。

2) 3.7 是第一个支持 OpenMP 的版本。 3.6 没有。

3) clang 只能与 libomp 一起工作。不要以 libomp 的方式放置 libgomp(头文件或库)! clang 使用 Intel API,libgomp 不支持。 -fopenmp=libomp 应该链接正确的库。

关于c++ - 将 OpenMP 与 clang 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33357029/

相关文章:

c - 管道上的多次读写

c - 'send' 的 OS X 冲突类型

c - 绕过C错误生成clang调试信息

c++ - 推导(非类型)模板参数类型的编译器方差

c - 面向对象的C无法编译

c++ - "template <> int line<0>::operator[](int y) const"有什么作用?

c++ - 从 vector 中删除元素时析构函数调用两次

c++ - if/else 与虚函数 : design performance

c++ - std::atomic 的默认值是多少?

c - 写结构+只保存指针?