我正在尝试在运行 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 许可协议
OpenMP 在 Clang 3.7 中得到很好的支持,但您可能需要启用它,请参见 此处。
另请参阅 支持的 OpenMP 构造的状态以获得 更精确的信息。
所以你不必再克隆 clang-omp 项目了。
您的项目使用什么构建系统,编译时遇到什么错误?
如果您使用 Makefile :不要忘记添加
-fopenmp
标志。如果您使用 CMake :您还应该使用 FindOpenMP 模块 查找正确的 OpenMP 标志并相应地添加它们。
如果您仍然收到包含错误,那么您的 omp.h 头文件可能不在 Clang 默认搜索路径中。因此,您应该尝试包含 GCC 附带的那个并添加
-I/usr/lib/gcc/x86_64-linux-gnu/4.8/include/
。因此,在您的情况下,您应该添加以下行: