2015-10-28 4 views
6

Я пытаюсь настроить проект OpenMP с помощью clang (3.7.0) на моем ноутбуке с использованием linux mint.'omp.h' файл не найден при компиляции с использованием clang

Теперь я прочитал, что OpenMP не поддерживается сразу, поэтому я выполнил этот урок https://clang-omp.github.io/, чтобы интегрировать openMP в clang.

Я клонировал исходный код, задал переменные окружения и установил флаг -fopenmp в мой проект, но я все равно получаю сообщение об ошибке «фатальная ошибка:« omp.h »не найден» при создании.

Я предполагаю, что я неправильно установил переменные среды. Есть ли способ проверить, поставил ли я их в нужное место? Я только что скопировал их в файл .bashrc.

Edit: когда я бегу $ найти 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) [email protected] $(LFLAGS) $(OBJECTS) 
    @echo "Linking complete!" 

$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.cpp 
    @$(CXX) $(CFLAGS) -c $< -o [email protected] 
    @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) 

ответ

2

'omp.h' является заголовок переменного тока, который поставляется с «Mint» libgcc- [версия] -dev. (На основе RPM ОС имеют этот заголовок в другом пакете, например libgomp- *)

Пример libgcc-4,8-Dev: /usr/lib/gcc/x86_64-linux-gnu/4.8/include/omp.h

Решение: Установить версию для GCC по умолчанию: $ gcc --version


+0

он говорит, что «libgcc-4,8-DEV уже новая версия.» – LxSwiss

+0

OpenMP теперь поддерживается в последних версиях Clang и GCC. – coincoin

+1

Предлагаем: CFLAGS = -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include –

3

OpenMP хорошо поддерживается в Clang 3.7, но вам может понадобиться для того, чтобы это увидеть here ,

OpenMP 3.1 is fully supported, but disabled by default. To enable it, please use the -fopenmp=libomp command line option.

Также см. Status of supported OpenMP constructs для получения дополнительных указаний.

Так что вам больше не нужно клонировать проект clang-omp.

Какую систему сборки вы используете для своего проекта и какие ошибки вы получаете при компиляции?

Если вы используете Makefile: не забывайте добавить флаг -fopenmp.

Если вы используете CMake: вы также должны искать правильные флаги OpenMP с FindOpenMP module и добавлять их соответственно.

Если вы все еще получаете ошибку включения, то заголовочный файл 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...] 
+0

Я создаю с помощью Makefile. и единственная ошибка, которую я получаю, это «src/main.cpp: 6: 10: фатальная ошибка: файл« omp.h »не найден #include ». Также, где мне нужно поставить опцию командной строки -fopenmp = libomp? Я не понял – LxSwiss

+0

Просьба указать, что некоторые ваши файлы Makefile, похоже, пропущены, а также убедитесь, что ваш PATH верен. Я добавлю ответ. – coincoin

Смежные вопросы