Подтвердить что ты не робот

G++ 4.6 нет файла <bits/С++ config.h>, как требуется заголовку cstring

В каталоге include С++ нет файла с именем bits/c++config.h, который требуется в файле заголовка cstring. Но когда я включаю заголовок cstring и компилирую с помощью g++, это не дает мне ошибку. Проблема возникла, когда я попытался скомпилировать программу с помощью clang++ компилятора следующим образом.

$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>

Я использую g++ 4.6.1 на Ubuntu 11.04

Что пошло не так?

4b9b3361

Ответ 1

Файл bits/c++config.h относится к конкретной платформе относительно текущего компилятора, поэтому он скрыт в другом каталоге, который по умолчанию проверяется g++, но не clang++, как кажется.

На моей машине запуск locate c++config.h дает следующие (соответствующие) файлы:

/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

Первый - для 64-битных, а второй для 32-разрядных.

Поэтому просто добавьте -I/usr/include/c++/4.6/i686-linux-gnu или -I/usr/include/c++/4.6/i686-linux-gnu/64 или все, что вам нужно для вашей платформы.

Ответ 2

Это может быть связано с тем, как clang++ ищет файлы заголовков.

Вы найдете образец патча, как они исправляют его для fedora 15, 4 месяца назад, здесь.

Смотрите эту красную шляпу bugzilla post для получения дополнительной информации.