2014-09-23 16 views
11

Tôi mới ở C và gặp một số sự cố khi biên dịch mã của tôi trong OS X.Làm thế nào để bao gồm omp.h trong OS X?

Tôi mã Java rất nhiều trong Eclipse và sử dụng thiết bị đầu cuối để biên dịch mã của tôi. Tuy nhiên bây giờ tôi đang học openMP và gặp rắc rối với nó.

Trước tiên tôi đã tải xuống Xcode để viết mã OpenMP nhưng không nhận dạng được <omp.h>. Sau đó, tôi đã cài đặt g++. Khi tôi gõ g++ -v vào thiết bị đầu cuối tôi có được điều này:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn) 
Target: x86_64-apple-darwin13.3.0 
Thread model: posix 

Nhưng khi tôi sử dụng g++ Mesh.cpp -fopenmp tôi vẫn nhận được

Mesh.cpp:4:10: fatal error: 'omp.h' file not found 
#include <omp.h> 
     ^
1 error generated. 

Sau đó, tôi đã cố gắng để cài đặt PTP vào Eclipse của tôi và có cùng một vấn đề. Tôi nghĩ rằng không có omp.h trong MacBook của tôi vì vậy tôi đã tìm kiếm nó và tìm thấy một số omp.h trong các thư mục theo số gcc-4.9.1/build/.

Đây là vấn đề. Dựa trên kinh nghiệm Java, lý do duy nhất tại sao tôi có tệp nhưng không thể sử dụng nó là Đường dẫn Lớp là sai. Tuy nhiên, tôi không có ý tưởng làm thế nào để thay đổi cấu hình này trong g ++, hoặc trong Xcode, hoặc trong Eclipse. Nhưng kể từ khi tôi có thể bao gồm các tập tin như <stdio.h> và biên dịch nó với tất cả các IDE, làm thế nào tôi không thể làm như vậy với <omp.h>?

Một điều tôi nhận thấy là phiên bản thư mục gcc là 4.9.1, nhưng khi tôi gõ gcc -v vào thiết bị đầu cuối tôi nhận được cùng với gõ vào g++ -v

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn) 
Target: x86_64-apple-darwin13.3.0 
Thread model: posix 

Không nên thông tin phiên bản nói điều gì đó về 4.9.1? Giống như những gì java -version hiển thị

java version "1.8.0_11" 
Java(TM) SE Runtime Environment (build 1.8.0_11-b12) 
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode) 

Cảm ơn bạn đã đọc. Bất kỳ trợ giúp được đánh giá cao.

Trả lời

12

GCC 4.9.1 thường không giao hàng với OS X (thực sự không có tàu GCC nào có Xcode nữa). Bản thân bạn phải được cài đặt bằng một phương tiện khác, ví dụ: Homebrew hoặc tự biên soạn như mô tả here. Những gì bạn có thể bị thiếu được đặt đúng là biến số PATH hoặc trình biên dịch được cài đặt bổ sung có nhị phân phiên bản hậu tố, tức là gcc-4.9 hoặc g++-4.9 thay vì chỉ đơn giản là gcc/g++.

Như @rubenvb đã đề cập, Apple liên kết các tệp thi hành Clang với các tên giống như GCC. Cá nhân tôi thấy rằng thực tiễn không tốt vì các phiên bản Clang gần đây được gửi cùng với Xcode phản ứng trên các tùy chọn dòng lệnh không được công nhận (ví dụ: các giao diện người dùng cụ thể của GCC) với các lỗi cứng.

+0

Tôi cài đặt GCC chính xác theo liên kết bạn đã đề cập, nhưng nó vẫn không hoạt động ... – user3928256

+0

Nếu bạn làm theo hướng dẫn trên trang được liên kết, thì trình biên dịch của bạn có tên là 'g ++ - 4.9' và bạn phải thêm đường dẫn vào nó trừ khi bạn đã cài đặt vào '/ usr/local/bin'. Ngoài ra, bạn phải cấu hình lại PTP để gọi 'g ++ - 4.9' thay cho' g ++'. –

+1

Cảm ơn! Sau khi nhập "xuất PATH =/usr/gcc-4.9.1/bin: $ PATH", tôi có thể sử dụng "g ++ - 4.9" ngay bây giờ. – user3928256

10

Các lệnh gccg++ không phải là những gì bạn cho là bằng XCode: Apple nghĩ rằng sẽ tốt hơn nếu giả mạo Clang là GCC để làm cho quá trình chuyển đổi mượt mà hơn.

Hỗ trợ Clang OpenMP vẫn đang được thực hiện. Nếu tôi không bỏ lỡ bất kỳ bản phát hành lớn nào của mã WIP, bạn sẽ cần phải xây dựng this version of clang và sử dụng nó.

Bạn có thể luôn luôn cài đặt GCC thực thông qua các công cụ như homebrew hoặc macports, sẽ có hỗ trợ OpenMP.

+1

Vì vậy, về cơ bản vấn đề là GCC trong máy tính xách tay của tôi là giả mạo của Clang? Vì cái sau không hỗ trợ OpenMP, nó gây ra tất cả vấn đề? Cảm ơn bạn. – user3928256

+0

@ user3928256 Vâng, lệnh 'gcc' mà bạn thực hiện được cung cấp bởi XCode, và thực sự là Clang. Tôi đã bỏ lỡ một phần của câu hỏi của bạn, nơi bạn đề cập đến cài đặt GCC 4.9.1. Vì vậy, nếu bạn thiết lập PATH của bạn như được mô tả bởi @ Hristo, bạn sẽ ổn thôi. – rubenvb

+0

Cập nhật từ trang web được liên kết: Hoạt động phát triển của hỗ trợ OpenMP trong trình biên dịch clang/llvm đã chuyển đến www.llvm.org. Xin vui lòng nhận được Clang hỗ trợ OpenMP (OpenMP 3.1 được hỗ trợ đầy đủ trong clang/llvm 3.7) và góp phần phát triển hơn nữa ở đó. Trang web này chỉ được lưu trữ cho mục đích lưu trữ. – Xoltar

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