web-dev-qa-db-ja.com

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)
12
LxSwiss

OpenMPはClang 3.7で十分にサポートされていますが、 here を参照して有効にする必要がある場合があります。

OpenMP 3.1は完全にサポートされていますが、デフォルトでは無効になっています。これを有効にするには、-fopenmp = libompコマンドラインオプションを使用してください。

さらに精度については、 サポートされているOpenMP構文のステータス も参照してください。

したがって、clang-ompプロジェクトのクローンを作成する必要はもうありません。

プロジェクトにどのビルドシステムを使用し、コンパイル時にどのエラーが発生しますか?

Makefileを使用する場合:-fopenmpフラグを追加することを忘れないでください。

CMakeを使用する場合: FindOpenMP module で正しい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...]
6
coincoin

'omp.h'は、 "Mint" libgcc- [version] -devに付属するcヘッダーです。 (RPMベースのOSでは、このヘッダーは別のパッケージ(libgomp- *など)にあります)

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

解決策:デフォルトのgccのバージョンをインストールします:$ gcc --version


libgcc-dev

4
Knud Larsen