gpt4 book ai didi

macos - 在 Mac OS X(sierra 和 Mojave)中启用 clang 中的 OpenMP 支持

转载 作者:行者123 更新时间:2023-12-02 14:23:26 29 4
gpt4 key购买 nike

我使用的是 Mac OS X Sierra,我发现 clang(LLVM 版本 8.1.0 (clang-802.0.38))不支持 OpenMP:当我运行 clang -fopenmp program_name.c 时,出现以下错误:

clang:错误:不支持的选项“-fopenmp”

clang 似乎不支持 -fopenmp 标志。

我在自制程序中找不到任何 openmp 库。据LLVM网站介绍,LLVM已经支持OpenMP。但我找不到在编译过程中启用它的方法。

这是否意味着 Mac 中默认的 clang 不支持 OpenMP? 您能提供一些建议吗?

(当我切换到GCC编译同一个程序时(使用brew install gcc --without-multilib安装gcc),编译成功。)

最佳答案

  1. 尝试使用 Homebrew的llvm:

    brew install llvm
  2. 然后,您将在 /usr/local/opt/llvm/bin 中获得所有 llvm 二进制文件。

    编译 OpenMP Hello World 程序。放置omp_hello.c

    /******************************************************************************
    * FILE: omp_hello.c
    * DESCRIPTION:
    * OpenMP Example - Hello World - C/C++ Version
    * In this simple example, the master thread forks a parallel region.
    * All threads in the team obtain their unique thread number and print it.
    * The master thread only prints the total number of threads. Two OpenMP
    * library routines are used to obtain the number of threads and each
    * thread's number.
    * AUTHOR: Blaise Barney 5/99
    * LAST REVISED: 04/06/05
    ******************************************************************************/
    #include <omp.h>
    #include <stdio.h>
    #include <stdlib.h>

    int main (int argc, char *argv[])
    {
    int nthreads, tid;

    /* Fork a team of threads giving them their own copies of variables */
    #pragma omp parallel private(nthreads, tid)
    {

    /* Obtain thread number */
    tid = omp_get_thread_num();
    printf("Hello World from thread = %d\n", tid);

    /* Only master thread does this */
    if (tid == 0)
    {
    nthreads = omp_get_num_threads();
    printf("Number of threads = %d\n", nthreads);
    }

    } /* All threads join master thread and disband */

    }

    在文件中并使用:

    /usr/local/opt/llvm/bin/clang -fopenmp -L/usr/local/opt/llvm/lib omp_hello.c -o hello

    您可能还需要使用 -I/usr/local/opt/llvm/include 设置 CPPFLAGS

    生成文件应如下所示:

    CPP = /usr/local/opt/llvm/bin/clang
    CPPFLAGS = -I/usr/local/opt/llvm/include -fopenmp
    LDFLAGS = -L/usr/local/opt/llvm/lib

    omp_hello: omp_hello.c
    $(CPP) $(CPPFLAGS) $^ -o $@ $(LDFLAGS)

更新

在 macOS 10.14 (Mojave) 中,您可能会收到类似错误

/usr/local/Cellar/llvm/7.0.1/lib/clang/7.0.1/include/omp.h:118:13: fatal error: 'stdlib.h' file not found

如果发生这种情况,则 /usr/include 中缺少 macOS SDK header 。他们将 Xcode 10 转移到 SDK 本身。将 header 安装到 /usr/include 中,并使用

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

关于macos - 在 Mac OS X(sierra 和 Mojave)中启用 clang 中的 OpenMP 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43555410/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com