使用 Clang 编译时“找不到‘omp.h’文件”

新手上路,请多包涵

我正在尝试在运行 Linux Mint 的笔记本电脑上使用 Clang (3.7.0) 设置 OpenMP 项目。

现在我读到 OpenMP 不受支持,所以我按照教程 https://clang-omp.github.io/ 将 OpenMP 集成到 Clang 中。

我已经克隆了源代码,设置了环境变量并将 -fopenmp 标志设置为我的项目,但我仍然收到错误:

致命错误:找不到“omp.h”文件

建设时。

我的猜测是我设置了错误的环境变量。有没有办法检查我是否把它们放在正确的地方?我刚刚将它们复制到 .bashrc 文件中。

当我运行 locate omp.h 我得到:

 /usr/include/re_comp.h
/usr/include/linux/ppp-comp.h
/usr/include/linux/seccomp.h
/usr/include/net/ppp-comp.h
/usr/include/openssl/comp.h
/usr/lib/gcc/x86_64-linux-gnu/4.8/include/omp.h
/usr/lib/perl/5.18.2/CORE/regcomp.h
/usr/src/linux-headers-3.13.0-24/arch/arm/include/asm/seccomp.h
/usr/src/linux-headers-3.13.0-24/arch/microblaze/include/asm/seccomp.h
/usr/src/linux-headers-3.13.0-24/arch/mips/include/asm/seccomp.h
/usr/src/linux-headers-3.13.0-24/arch/powerpc/include/uapi/asm/seccomp.h
/usr/src/linux-headers-3.13.0-24/arch/s390/include/asm/seccomp.h
/usr/src/linux-headers-3.13.0-24/arch/sh/include/asm/seccomp.h
/usr/src/linux-headers-3.13.0-24/arch/sparc/include/asm/seccomp.h
/usr/src/linux-headers-3.13.0-24/arch/x86/include/asm/seccomp.h
/usr/src/linux-headers-3.13.0-24/include/linux/ppp-comp.h
/usr/src/linux-headers-3.13.0-24/include/linux/seccomp.h
/usr/src/linux-headers-3.13.0-24/include/net/ipcomp.h
/usr/src/linux-headers-3.13.0-24/include/uapi/linux/ppp-comp.h
/usr/src/linux-headers-3.13.0-24/include/uapi/linux/seccomp.h
/usr/src/linux-headers-3.13.0-24-generic/include/config/seccomp.h
/usr/src/linux-headers-3.13.0-24-generic/include/config/crypto/pcomp.h
/usr/src/linux-headers-3.13.0-24-generic/include/config/inet/ipcomp.h
/usr/src/linux-headers-3.13.0-24-generic/include/config/inet6/ipcomp.h
/usr/src/linux-headers-3.13.0-24-generic/include/config/isdn/ppp/bsdcomp.h
/usr/src/linux-headers-3.13.0-24-generic/include/config/ppp/bsdcomp.h
/usr/src/linux-headers-3.13.0-24-generic/include/config/xfrm/ipcomp.h
/usr/src/linux-headers-3.13.0-24-generic/include/linux/ppp-comp.h
/usr/src/linux-headers-3.13.0-24-generic/include/linux/seccomp.h

这是我的生成文件:

 # Requires the following project directory structure:
#  /bin
#  /obj
#  /src

# Use 'make remove' to clean up the whole project

# Name of target file
TARGET     = main

CXX        = clang++
CFLAGS     = -std=c++11 \
             -Weverything -Wall -Wextra -Wold-style-cast -Wpointer-arith -Wcast-qual \
             -Wno-missing-braces -Wempty-body -Wno-error=uninitialized \
             -Wno-error=deprecated-declarations -Wno-c++98-compat \
             -pedantic-errors -pedantic \
             -Os -fopenmp

LINKER     = clang++ -o
LFLAGS     = -Wall -Weverything -pedantic

SRCDIR     = src
OBJDIR     = obj
BINDIR     = bin

SOURCES   := $(wildcard $(SRCDIR)/*.cpp)
INCLUDES  := $(wildcard $(SRCDIR)/*.h)
OBJECTS   := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)

RM         = rm -f

$(BINDIR)/$(TARGET): $(OBJECTS)
    @$(LINKER) $@ $(LFLAGS) $(OBJECTS)
    @echo "Linking complete!"

$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.cpp
    @$(CXX) $(CFLAGS) -c $< -o $@
    @echo "Compiled "$<" successfully!"

.PHONEY: prepare
prepare:
    mkdir -p bin
    mkdir -p obj

.PHONEY: clean
clean:
    @$(RM) $(OBJECTS)
    @echo "Cleanup complete!"
    @$(RM) tmp_file-*
    @echo "Temporary files removed!"

.PHONEY: remove
remove: clean
    @$(RM) $(BINDIR)/$(TARGET)
    @echo "Executable removed!"

.PHONEY: run
run:
    ./bin/$(TARGET)

原文由 LxSwiss 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.7k
2 个回答

OpenMP 在 Clang 3.7 中得到很好的支持,但您可能需要启用它,请参见 此处

完全支持 OpenMP 3.1,但默认禁用。要启用它,请使用 -fopenmp=libomp 命令行选项。

另请参阅 支持的 OpenMP 构造的状态以获得 更精确的信息。

所以你不必再克隆 clang-omp 项目了。

您的项目使用什么构建系统,编译时遇到什么错误?

如果您使用 Makefile :不要忘记添加 -fopenmp 标志。

如果您使用 CMake :您还应该使用 FindOpenMP 模块 查找正确的 OpenMP 标志并相应地添加它们。

如果您仍然收到包含错误,那么您的 omp.h 头文件可能不在 Clang 默认搜索路径中。因此,您应该尝试包含 GCC 附带的那个并添加 -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include/

因此,在您的情况下,您应该添加以下行:

 CFLAGS = -std=c+11 [etc...]
CFLAGS += -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include/
LINKER = [etc...]

原文由 coincoin 发布,翻译遵循 CC BY-SA 4.0 许可协议

我在这个连接中找到了解决方案;
注意,需要将安装命令修改为:sudo apt-get install libomp-dev

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题