2012-02-08 22 views
19

Không có tệp nào được gọi là bits/c++config.h trong thư mục C++ bao gồm được yêu cầu bởi tệp tiêu đề cstring. Nhưng khi tôi bao gồm tiêu đề cstring và biên dịch với g++, nó không cho tôi lỗi. Vấn đề xảy ra khi tôi cố gắng biên dịch chương trình với clang++ trình biên dịch theo cách sau.g ++ 4.6 vấn đề không có <bit/C++ config.h> tập tin theo yêu cầu của tiêu đề cstring

$clang++ -cc1 -I/usr/include -I/usr/include/c++/4.6.1 -I/usr/lib/gcc/i686-linux-gnu/4.6.1 -I/usr/include/i386-linux-gnu -I opt_149739_build/include hello.cpp 

In file included from /media/space/hello.cpp:2: 
In file included from /media/space/opt_149739_build/include/clang/Driver/Driver.h:13: 
In file included from /media/space/opt_149739_build/include/clang/Basic/Diagnostic.h:17: 
In file included from /media/space/opt_149739_build/include/clang/Basic/DiagnosticIDs.h:18: 
In file included from /media/space/opt_149739_build/include/llvm/ADT/StringRef.h:14: 
/usr/include/c++/4.6.1/cstring:42:10: fatal error: 'bits/c++config.h' file not found 
#include <bits/c++config.h> 

Tôi đang sử dụng g ++ 4.6.1 trên Ubuntu 11.04

gì đã xảy ra?

+0

có thể cung cấp thêm chi tiết, ví dụ: bạn sử dụng phiên bản gcc nào? trên hệ điều hành nào? và dòng lệnh gcc của bạn là gì? – Coren

Trả lời

29

Tệp bits/c++config.h là nền tảng cụ thể bao gồm liên quan đến trình biên dịch hiện tại, do đó, nó được ẩn trong thư mục khác, được mặc định bằng g ++, nhưng không phải bằng clang ++.

Trong máy tính của tôi, chạy locate c++config.h cho các tập tin sau đây (có liên quan):

/usr/include/c++/4.6/i686-linux-gnu/64/bits/c++config.h 
/usr/include/c++/4.6/i686-linux-gnu/bits/c++config.h 

Người đầu tiên là dành cho phiên bản 64-bit và một trong những thứ hai cho 32-bit.

Vì vậy, chỉ cần thêm -I/usr/include/c++/4.6/i686-linux-gnu hoặc -I/usr/include/c++/4.6/i686-linux-gnu/64 hoặc bất kỳ thứ gì bạn cần cho nền tảng của mình.

+0

vâng tôi phát hiện ra nó có trong cùng một thư mục những gì bạn có. thanks –

+1

Nếu bạn không có C++ config.h thích hợp cho kiến ​​trúc của bạn, hãy cài đặt libstdC++ - devel từ kho lưu trữ của bạn. –

+0

trong một số trường hợp, điều này có thể không đủ: đôi khi bạn cần -I/usr/include/C++/4.6/i686-linux-gnu/C++/4.6 Tôi sử dụng -I/usr/include/i386-linux-gnu/C++/4.7/cho máy của tôi và phiên bản 4.7 của gcc và tất cả hoạt động –

0

Nó có thể liên quan đến cách clang ++ tìm kiếm các tệp tiêu đề của nó.

Bạn sẽ tìm thấy bản vá mẫu về cách khắc phục sự cố cho fedora 15, 4 tháng trước, here.

Xem điều này red hat bugzilla post để biết thêm thông tin.

+0

Trong khi cài đặt clang, tôi đã chỉnh sửa tệp Frontend/InitHeaderSearch.cpp để bao gồm các thư mục cần thiết để giải quyết vấn đề. Tôi vẫn gặp lỗi này. Bây giờ, tôi đã thêm tất cả các đường dẫn cần thiết trong CMakeLists.txt của tôi để giải quyết vấn đề này. –

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