Xcode: 未定义符号。_omp_get_max_threads。

问题描述 投票:0回答:1

我试图用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 xcode openmp linker-errors
1个回答
0
投票

这是你需要做的,以使C或C++项目编译和链接与OpenMP支持在Xcode。前往 构建设置 在项目编辑器中,选择项目节点,然后选择 All 设置过滤器。进行以下更改。

  • 头部搜索路径 (在 搜索路径 组)--设置为(或添加到现有值)。/usr/local/include,这样编译器就可以找到 /usr/local/include/omp.h
  • 图书馆搜索路径 (在 搜索路径 组)--设置为(或添加到现有的值)。/usr/local/lib这样,链接器就能找到 /usr/local/lib/libomp.dylib

选择目标可执行节点,并进行以下附加更改。

  • 其他C语言标志 (在 Apple Clang - 自定义编译器标志 组)--设置为(或添加 -Xclang -fopenmp 以使编译器能够处理OpenMP实用名词。
  • 其他链接器标志 (在 链接 组)--设置为(或添加 -lomp 以实现与OpenMP运行时库的链接。libomp.dylib

你也可以根据你的项目结构,在项目节点中进行这四项修改,使之成为整个项目或目标节点中的修改。

对于C++项目,必须把 -Xclang -fopenmp其他C++标志.

© www.soinside.com 2019 - 2024. All rights reserved.