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

我正尝试在运行linux mint的笔记本电脑上使用clang(3.7.0)来设置OpenMP项目。

现在我读了OpenMP不被支持,所以我按照这个教程https://clang-omp.github.io/将openMP整合到了clang中。

我已经克隆了源代码,设置了环境variables,并将-fopenmp标志设置为我的项目,但是在构build时,仍然收到错误“fatal error:'omp.h'文件未find”。

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

编辑:当我运行$查找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 

这里是我的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) 

    OpenMP在Clang 3.7中得到很好的支持,但你可能需要启用它在这里看到。

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

    另请参阅受支持的OpenMP构造的状态以获取更多精确度。

    所以你不必克隆铿锵项目了。

    你的项目使用什么样的编译系统,编译时会得到什么样的错误?

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

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

    如果仍然出现include错误,那么您的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...] 

    'omp.h'是“Mint”libgcc- [version] -dev附带的ac头文件。 (基于RPM的操作系统在不同的包中有这个头文件,比如libgomp- *)

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

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


    libgcc中-dev的