Сборка золотого компоновщика с MinGW для Windows, FLEX/bison 'YYSTYPE' не была объявлена в этой области
Я пытаюсь собрать золотой компоновщик, включенный в GNU binutils, используя mingw. Шаги, которые я предпринял
- Установите mingw со всеми пакетами, используя установщик.
- Установите версию FLEX для Windows в папку по умолчанию с помощью установщика Windows.
- Запустите./configure в каталоге компоновщика золота из оболочки mingw, которая, кажется, работает нормально
- Запустите 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-ch, и у него есть эта функция:
/* Called by the bison parser skeleton to return the next token. */
extern int
yylex(YYSTYPE*, void* closure);
Однако YYSTYPE не определен нигде, что я могу найти.
Я новичок в использовании mingw и msys, поэтому, возможно, где-то пропустил некоторые шаги. Любая помощь в получении этого будет очень признательна.
1 ответ
Поскольку этот вопрос оставался без ответа в течение нескольких месяцев, я изучил проблему.
Я скачал binutils-2.25 (последний на эту дату) и попытался выполнить ваши действия.
Я обнаружил, что если вы только строите золото без остальной части binutils, оно не строит. Если вы выполняете ./configure
а также make
на верхнем уровне он строит золотой штраф. Если вы тогда cd gold
и сделать ./configure
а также make
(хотя излишне), то это также работает нормально.
Я обнаружил, что когда он потерпел неудачу только на золоте, он продвинулся дальше, чем ваша сборка.
Мое внимание было также привлечено к вашей фразе FLEX для местоположения по умолчанию. Инструкции с FLEX ясно дают понять, что вы не должны полагаться на местоположение по умолчанию (которое может быть /Program Files/
или аналогичный), но должен использовать путь, который не содержит пробелов. Если вы этого не заметили, то это ваша вина.
В последних версиях вы можете получить золотую обработку, убедившись, что вы правильно установили flex (и бизон) в непространственных путях, затем загрузили 2.25 и собрали весь пакет binutils, а не только золото.
Я надеюсь, что этот анализ будет полезен для тех, кто приходит позже и находит похожие проблемы.