Сборка золотого компоновщика с MinGW для Windows, FLEX / bison ‘YYSTYPE’ не была объявлена ​​в этой области

Я пытаюсь собрать золотой компоновщик, включенный в GNU binutils, используя mingw. Шаги, которые я предпринял

  1. Установите mingw со всеми пакетами, используя установщик.
  2. Установите версию FLEX для Windows в папку по умолчанию с помощью установщика Windows.
  3. Запустите ./configure в каталоге компоновщика золота из оболочки mingw, которая, кажется, работает нормально
  4. Запустите make, вот где я получаю некоторые ошибки.

Я включил полный вывод ./configure и make в pastebin здесь:
http://pastebin.com/1XLkZVVm

Но важная часть заключается в следующем:

make[2]: Entering directory `c:/binutils-2.23.1/binutils-2.23.1/gold'
g++ -DHAVE_CONFIG_H -I.  -I. -I./../include -I./../elfcpp -DLOCALEDIR="\"/usr/lo
cal/share/locale\"" -DBINDIR="\"/usr/local/bin\"" -DTOOLBINDIR="\"/usr/local//bi
n\"" -DTOOLLIBDIR="\"/usr/local//lib\""   -W -Wall    -Wno-format -Werror -D_LAR
GEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -frandom-seed=expression.o  -MT expression.
o -MD -MP -MF .deps/expression.Tpo -c -o expression.o expression.cc
In file included from expression.cc:33:0:
script-c.h:221:7: エラー: 'yylex' initialized and declared 'extern' [-Werror]
script-c.h:221:7: エラー: 'YYSTYPE' was not declared in this scope
script-c.h:221:15: エラー: expected primary-expression before ',' token
script-c.h:221:17: エラー: expected primary-expression before 'void'
script-c.h:221:30: エラー: expression list treated as compound expression in ini
tializer [-fpermissive]
cc1plus.exe: all warnings being treated as errors
make[2]: *** [expression.o] Error 1
make[2]: Leaving directory `c:/binutils-2.23.1/binutils-2.23.1/gold'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `c:/binutils-2.23.1/binutils-2.23.1/gold'
make: *** [all] Error 2

Я посмотрел в файле script-c.h, и у него есть эта функция:

/* Called by the bison parser skeleton to return the next token.  */

extern int
yylex(YYSTYPE*, void* closure);

Однако YYSTYPE не определен нигде, что я могу найти.

Я новичок в использовании mingw и msys, поэтому, возможно, где-то пропустил некоторые шаги. Любая помощь в получении этого будет очень признательна.

5

Решение

Поскольку этот вопрос оставался без ответа в течение нескольких месяцев, я изучил проблему.

Я скачал binutils-2.25 (последний на эту дату) и попытался выполнить ваши действия.

Я обнаружил, что если вы только строите золото без остальной части binutils, оно не строит. Если вы выполняете ./configure а также make на верхнем уровне он строит золотой штраф. Если вы тогда cd gold и сделать ./configure а также make (хотя излишне), то это также работает нормально.

Я обнаружил, что, когда он потерпел неудачу только на золоте, он продвинулся дальше, чем ваша сборка.

Мое внимание было также привлечено к вашей фразе FLEX в местоположение по умолчанию. Инструкции с FLEX ясно дают понять, что вы не должны полагаться на местоположение по умолчанию (которое может быть /Program Files/ или аналогичный) но должен использовать путь, который не содержит пробелов. Если вы этого не заметили, то это ваша вина.

В последних версиях вы можете получить золотую обработку, убедившись, что вы правильно установили flex (и бизон) в непространственных путях, затем загрузили 2.25 и собрали весь пакет binutils, а не только золото.

Я надеюсь, что этот анализ будет полезен для тех, кто приходит позже и находит похожие проблемы.

1

Другие решения

Других решений пока нет …