Как /usr/include файлы (например, string.h) связаны с версией gcc?
У меня есть система Kubuntu 11.10 с Eclipse-CDT Indigo. gcc-4.6 был установлен вместе с Eclipse. С тех пор я установил gcc-4.4 и gcc-4.2 через пакеты Ubuntu.
Я могу переключить символическую ссылку / usr / bin / gcc на 4.4 или 4.6, и Eclipse создает мой код в любом случае. Однако, когда я устанавливаю символическую ссылку для использования gcc-4.2, я получаю следующую ошибку (и многие другие):
In file included from /usr/include/c++/4.2/cstring:52,
from /usr/include/c++/4.2/i486-linux-gnu/bits/c++locale.h:47,
from /usr/include/c++/4.2/iosfwd:45,
from /usr/include/c++/4.2/ios:43,
from /usr/include/c++/4.2/ostream:45,
from /usr/include/c++/4.2/iostream:45,
from ../ProjStructure.h:4,
from ../Scanner.h:3,
from ../Scanner.cpp:1:
/usr/include/string.h:29: error: ‘__BEGIN_DECLS’ does not name a type
Таким образом, кажется, что string.h, который есть в / usr / include, ожидает, что __BEGIN_DECLS будет определено одним из специфических включений компилятора.
/usr/include/string.h происходит из пакета libc6-dev, который, похоже, не имеет версий, специфичных для компилятора. Я ожидал, что система пакетов справится с этим и установит все нужные версии вещей.
Я читал документы GNU на нескольких версиях GCC, но они ничего не говорят о включаемых файлах / каталогах.
Что я здесь не так делаю?
1 ответ
Из какой Ubuntu у вас есть пакет gcc-4.2?
Это вероятно из более старой версии Ubuntu. Новые выпуски Ubuntu изменили некоторые заголовки и каталоги библиотек, которые ломают старые компиляторы.