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
Что пошло не так?
Ответы
Ответ 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 для получения дополнительной информации.