我试图用Xcode 11.4在C中使用openMP。我已经用Homebrew安装了libomp,Homebrew显然将它安装在:usrlocalCellarlibomp10.0.0。
下面的代码产生了一个链接器错误。Undefined symbol: _omp_get_max_threads (同样,get_thread_num也是如此)。
#include <stdio.h>
#include "/usr/local/Cellar/libomp/10.0.0/include/omp.h"
int main () {
#pragma omp parallel
{
int threadNum = omp_get_thread_num ();
int maxThreads = omp_get_max_threads();
}
return 0; }
我试着将usrlocalCellar添加到头部搜索路径中,并在Xcode项目中直接包含omp.h,并添加编译标志。-openmp
但行为没有改变。
1) 我找不到通过Xcode直接安装OpenMP的方法,可以吗?
2) 我是否需要做一些进一步的工作,让Xcode识别安装在Homebrew中的库?
3)为什么Homebrew将库安装在usrlocalCellar中,这是一个不好的信号吗?
4) 为什么缺少符号 _omp_get_max_threads
而不是 omp_get_max_threads
?
(编辑).在usrlocalinclude下也有同样的三个头文件,即omp.h、ompt.h和omp-tools.h,和usrlocalCellarlibomp10.0.0中一样。在usrlocalinclude下也有三个同样的头文件, omp.h, ompt.h 和 omp-tools.h,和usrlocalCellarlibomp10.0.0中的一样,不知道为什么。
这是你需要做的,以使C或C++项目编译和链接与OpenMP支持在Xcode。前往 构建设置 在项目编辑器中,选择项目节点,然后选择 All
设置过滤器。进行以下更改。
/usr/local/include
,这样编译器就可以找到 /usr/local/include/omp.h
/usr/local/lib
这样,链接器就能找到 /usr/local/lib/libomp.dylib
选择目标可执行节点,并进行以下附加更改。
-Xclang -fopenmp
以使编译器能够处理OpenMP实用名词。-lomp
以实现与OpenMP运行时库的链接。libomp.dylib
你也可以根据你的项目结构,在项目节点中进行这四项修改,使之成为整个项目或目标节点中的修改。
对于C++项目,必须把 -Xclang -fopenmp
在 其他C++标志.