2015-10-28 16 views
6

Tôi đang cố gắng thiết lập dự án OpenMP bằng cách sử dụng clang (3.7.0) trên máy tính xách tay chạy Linux của mình.'omp.h' khi biên dịch bằng cách sử dụng clang

Bây giờ tôi đã đọc rằng OpenMP không được hỗ trợ ngay lập tức vì vậy tôi đã làm theo hướng dẫn này https://clang-omp.github.io/ để tích hợp OpenMP vào tiếng kêu.

Tôi đã sao chép mã nguồn, đặt biến môi trường và đặt cờ -fopenmp cho dự án của tôi, nhưng tôi vẫn gặp lỗi "lỗi nghiêm trọng: 'omp.h' không tìm thấy" khi xây dựng.

Tôi đoán là tôi đã đặt biến môi trường sai. Có cách nào để kiểm tra xem tôi có đặt đúng vị trí không? Tôi vừa sao chép chúng trong tệp .bashrc.

Edit: khi tôi chạy $ xác định vị trí omp.h tôi nhận được:

/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 

đây là makefile của tôi:

# 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) 

Trả lời

2

'omp.h' được tiêu đề ac mà đến với "Mint" libgcc- [version] -dev. (Dựa RPM của hệ điều hành có tiêu đề này trong một gói khác nhau, ví dụ như libgomp- *)

Ví dụ libgcc-4,8-dev: /usr/lib/gcc/x86_64-linux-gnu/4.8/include/omp.h

giải pháp: Cài đặt phiên bản cho gcc mặc định của bạn: $ gcc --version


+0

nó nói rằng – LxSwiss

+0

OpenMP được hỗ trợ trong các phiên bản gần đây của Clang và GCC bây giờ. – coincoin

+1

Đề xuất: CFLAGS = -I/usr/lib/gcc/x86_64-linux-gnu/4.8/bao gồm –

3

OpenMP được hỗ trợ tốt trong Clang 3,7 nhưng bạn có thể cần phải kích hoạt nó thấy here .

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

Xem thêm Status of supported OpenMP constructs để biết thêm các biện pháp.

Vì vậy, bạn không phải sao chép dự án clang-omp nữa.

Bạn sử dụng hệ thống xây dựng nào cho dự án của mình và bạn nhận được lỗi nào khi biên dịch?

Nếu bạn sử dụng Makefile: đừng quên thêm cờ -fopenmp.

Nếu bạn sử dụng CMake: bạn cũng nên tìm kiếm cờ OpenMP phù hợp với FindOpenMP module và thêm chúng tương ứng.

Nếu bạn vẫn nhận được lỗi bao gồm thì tệp tiêu đề omp.h của bạn có thể không nằm trong đường dẫn tìm kiếm mặc định. Vì vậy, bạn nên cố gắng bao gồm một trong đó đi kèm với gcc và thêm -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include/.

Vì vậy, trong trường hợp của bạn, bạn nên thêm dòng này: "libgcc-4,8-dev đã là phiên bản mới nhất"

CFLAGS = -std=c+11 [etc...] 
CFLAGS += -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include/ 
LINKER = [etc...] 
+0

Tôi xây dựng bằng Makefile. và lỗi duy nhất tôi nhận được là "src/main.cpp: 6: 10: lỗi nghiêm trọng: 'omp.h' không tìm thấy tệp #include ". Ngoài ra nơi nào tôi cần phải đặt tùy chọn dòng lệnh -fopenmp = libomp? Tôi không hiểu – LxSwiss

+0

Vui lòng cung cấp một số nội dung Makefile của bạn dường như bị bỏ qua và cũng xác minh rằng PATH của bạn là chính xác. Tôi sẽ thêm một câu trả lời. – coincoin

Các vấn đề liên quan