Xcode:未定义符号:_omp_get_max_threads
Xcode: Undefined symbol: _omp_get_max_threads
我正在尝试在 Xcode 11.4 的 C 中使用 openMP。我已经用 Homebrew 安装了 libomp,而 homebrew 显然将它安装在:/usr/local/Cellar/libomp/10.0.0/
下面的代码会生成链接器错误:未定义的符号:_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; }
我尝试将 usr/local/Cellar 添加到 Header 搜索路径,并在我的 Xcode 项目中直接包含 omp.h,并添加编译标志 -openmp
,行为不会改变。
1) 我找不到直接通过 Xcode 安装 OpenMP 的方法,这可能/更好吗?
2) Xcode 是否需要进一步执行操作才能识别安装了 Homebrew 的库?
3) 为什么 Homebrew 在 usr/local/Cellar 中安装库,这是一个不好的迹象吗?
4) 为什么缺少符号 _omp_get_max_threads
而不是 omp_get_max_threads
?
(edit):在usr/local/include下也有同样的三个headers、omp.h、ompt.h和omp-tools.h,如/usr/local/Cellar/libomp/10.0.0/.不知道为什么。
这是编译 C 或 C++ 项目并 link 在 Xcode 中支持 OpenMP 所需要做的。转到项目编辑器中的 Build Settings,select 项目节点,然后是 All
设置过滤器。进行以下更改:
- Header Search Paths(在 Search Paths 组中)- 设置为(或添加 tp 现有值)
/usr/local/include
, 这样编译器就可以找到 /usr/local/include/omp.h
- Library Search Paths(在 Search Paths 组中)- 设置为(或添加到现有值)
/usr/local/lib
, 这样 link 人就可以找到 /usr/local/lib/libomp.dylib
Select 目标可执行节点并进行以下附加更改:
- 其他 C 标志(在 Apple Clang - 自定义编译器标志 组中)- 设置为(或添加)
-Xclang -fopenmp
以启用编译器对 OpenMP 编译指示的处理
- Other Linker Flags(在 Linking 组中)- 设置(或添加)
-lomp
以启用 link使用 OpenMP 运行时库 libomp.dylib
您还可以在项目节点中进行所有四项更改,以在项目范围内或在目标节点中进行更改,具体取决于您的项目结构。
对于 C++ 项目,必须将 -Xclang -fopenmp
放入 Other C++ Flags.
我正在尝试在 Xcode 11.4 的 C 中使用 openMP。我已经用 Homebrew 安装了 libomp,而 homebrew 显然将它安装在:/usr/local/Cellar/libomp/10.0.0/
下面的代码会生成链接器错误:未定义的符号:_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; }
我尝试将 usr/local/Cellar 添加到 Header 搜索路径,并在我的 Xcode 项目中直接包含 omp.h,并添加编译标志 -openmp
,行为不会改变。
1) 我找不到直接通过 Xcode 安装 OpenMP 的方法,这可能/更好吗?
2) Xcode 是否需要进一步执行操作才能识别安装了 Homebrew 的库?
3) 为什么 Homebrew 在 usr/local/Cellar 中安装库,这是一个不好的迹象吗?
4) 为什么缺少符号 _omp_get_max_threads
而不是 omp_get_max_threads
?
(edit):在usr/local/include下也有同样的三个headers、omp.h、ompt.h和omp-tools.h,如/usr/local/Cellar/libomp/10.0.0/.不知道为什么。
这是编译 C 或 C++ 项目并 link 在 Xcode 中支持 OpenMP 所需要做的。转到项目编辑器中的 Build Settings,select 项目节点,然后是 All
设置过滤器。进行以下更改:
- Header Search Paths(在 Search Paths 组中)- 设置为(或添加 tp 现有值)
/usr/local/include
, 这样编译器就可以找到/usr/local/include/omp.h
- Library Search Paths(在 Search Paths 组中)- 设置为(或添加到现有值)
/usr/local/lib
, 这样 link 人就可以找到/usr/local/lib/libomp.dylib
Select 目标可执行节点并进行以下附加更改:
- 其他 C 标志(在 Apple Clang - 自定义编译器标志 组中)- 设置为(或添加)
-Xclang -fopenmp
以启用编译器对 OpenMP 编译指示的处理 - Other Linker Flags(在 Linking 组中)- 设置(或添加)
-lomp
以启用 link使用 OpenMP 运行时库libomp.dylib
您还可以在项目节点中进行所有四项更改,以在项目范围内或在目标节点中进行更改,具体取决于您的项目结构。
对于 C++ 项目,必须将 -Xclang -fopenmp
放入 Other C++ Flags.