使用clang编译时找不到'omp.h'文件

LxS*_*iss 10 c++ linux openmp clang++

我正在尝试使用clang(3.7.0)在运行linux mint的笔记本电脑上设置一个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
Run Code Online (Sandbox Code Playgroud)

这是我的makefile:

# 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)
Run Code Online (Sandbox Code Playgroud)

coi*_*oin 6

Clang 3.7中很好地支持OpenMP,但您可能需要在此处启用它.

完全支持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...]
Run Code Online (Sandbox Code Playgroud)


Knu*_*sen 4

'omp.h' 是一个 C 头文件,与“Mint” libgcc-[version]-dev一起提供(基于RPM的操作系统在不同的包中具有此头文件,例如 libgomp-*)。

示例libgcc-4.8-dev:/usr/lib/gcc/x86_64-linux-gnu/4.8/include/omp.h

解决方案:安装默认 GCC 的版本:gcc --version