LINUX.ORG.RU

Mingw не компилит собственные хедеры.

 ,


0

1

Пытаюсь перейти на GCC (с уже не маленьким проектом). Проект вполне нормально собрался под Watcom. По ходу дела возникла непонятная проблема: Вылетают тонны ошибок на его собственные хедеры. Типа (..\lib\gcc\mingw32\4.7.1\include\c++\exception):

  class exception
  {
  public:
    exception() _GLIBCXX_USE_NOEXCEPT { }
    virtual ~exception() _GLIBCXX_USE_NOEXCEPT;

..\lib\gcc\mingw32\4.7.1\include\c++\exception|65|error: expected identifier before '(' token|
..\lib\gcc\mingw32\4.7.1\include\c++\exception|65|error: expected ')' before numeric constant|
..\lib\gcc\mingw32\4.7.1\include\c++\exception|65|error: expected ')' before numeric constant|
..\lib\gcc\mingw32\4.7.1\include\c++\exception|65|error: 'exception' declared as function returning a function|
..\lib\gcc\mingw32\4.7.1\include\c++\exception|65|error: expected ';' at end of member declaration|

На выходе препроца:

  class exception
  {
  public:
    exception() ((0) ? (void)0 : _assert("0", "../lib/gcc/mingw32/4.7.1/include/c++/exception", 65)) { }
    virtual ~exception() ((0) ? (void)0 : _assert("0", "../lib/gcc/mingw32/4.7.1/include/c++/exception", 66));

Другой пример (..\lib\gcc\mingw32\4.7.1\include\c++\new):

  class bad_alloc : public exception 
  {
  public:
    bad_alloc() throw() { }


..\lib\gcc\mingw32\4.7.1\include\c++\new|59|error: expected ')' before numeric constant|
..\lib\gcc\mingw32\4.7.1\include\c++\new|59|error: expected ')' before numeric constant|
..\lib\gcc\mingw32\4.7.1\include\c++\new|59|error: 'bad_alloc' declared as function returning a function|
..\lib\gcc\mingw32\4.7.1\include\c++\new|59|error: expected ';' at end of member declaration|
..\lib\gcc\mingw32\4.7.1\include\c++\new|59|error: expected unqualified-id before numeric constant|
..\lib\gcc\mingw32\4.7.1\include\c++\new|63|error: expected identifier before '(' token|
..\lib\gcc\mingw32\4.7.1\include\c++\new|63|error: expected ')' before numeric constant|
..\lib\gcc\mingw32\4.7.1\include\c++\new|63|error: expected ')' before numeric constant|
..\lib\gcc\mingw32\4.7.1\include\c++\new|63|error: 'bad_alloc' declared as function returning a function|
..\lib\gcc\mingw32\4.7.1\include\c++\new|63|error: expected ';' at end of member declaration|
..\lib\gcc\mingw32\4.7.1\include\c++\new|63|error: expected unqualified-id before numeric constant|
..\lib\gcc\mingw32\4.7.1\include\c++\new|66|error: expected ';' at end of member declaration|

Было подозрение, что там потерян какой-то дефайн, но на выходе препроцессора вроде всё норм. Может кто сталкивался с таким раньше?

В качестве иде - codeBlocks, mingw из его комплекта.

Ошибки в хедерах в С++ бывают постоянно. Обычно когда параметры шаблонов не удовлетворяют определенным требованиям.

Absurd ★★★
()

Это какая-то ерунда, _GLIBCXX_USE_NOEXCEPT должен разворачиваться в throw(), или в noexcept, но не в выражение:

# 61 "/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/include/g++-v4/exception" 3
  class exception
  {
  public:
    exception() throw() { }
    virtual ~exception() throw();

Ищите где у вас определяется этот макрос.

gv
()

поменяйте хедеры (#include в своих проектах) местами - и вообще надо рассматривать/постить источник ошибки а не конец простыни выплюнутой gcc:)

всего делов - какой-то макрос/шаблон не развернулся вовремя :)

MKuznetsov ★★★★★
()
Ответ на: комментарий от gv

Да в том и прикол, что по хедерам он разворачивается в throw() или noexcept. Откуда идёт *это* я найти пока не смог.

TripleGluk
() автор топика
Ответ на: комментарий от MKuznetsov

Если бы я смог найти этот источник... Это какие-то внутр gcc приколы, инклюды там идут через 10 руки. У меня, собственно вообще практически чистый C код и никаких new или exception там нет.

TripleGluk
() автор топика
Ответ на: комментарий от TripleGluk

Опытным путём - перестановка инклюда <string.h> на первое место решила проблему. Правда всплыла другая: Есть 2 инклюда - один в лежит в самом gcc, второй - в кат проекта (список расширений опенгл), и как пути только не менял - gcc упорно брал свой файл (сильно устаревший). Честно - не понимаю, как он вообще его там нашел? Решилась тупо заменой gcc-шного, но сам факт удивляет.

TripleGluk
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.