5

我正在尝试使用 mingw 构建 GNU binutils 中包含的黄金链接器。我采取的步骤-

  1. 使用安装程序安装 mingw 和所有软件包。
  2. 使用 Windows 安装程序将 Windows 版本的 FLEX 安装到默认位置。
  3. 在 mingw shell 的黄金链接器目录中运行 ./configure 似乎工作正常
  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-ch 文件,它具有以下功能:

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

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

但是 YYSTYPE 没有在我能找到的任何地方定义。

我是使用 mingw 和 msys 的新手,所以我可能在某处错过了一些步骤。任何帮助构建它都将不胜感激。

4

1 回答 1

2

由于这个问题几个月来一直没有答案,我调查了这个问题。

我下载了 binutils-2.25(目前最新)并尝试按照您的操作进行操作。

我发现如果你只构建黄金而没有其余的 binutils,它就不会构建。如果您在顶层执行 a./configure和,它会构建黄金罚款。make如果您然后cd gold执行./configureand make(尽管不必要),那么它也可以正常工作。

我确实发现,当它仅在黄金上失败时,它比你的构建更进一步。

我的注意力也被您的短语FLEX 吸引到了默认位置。FLEX 的说明清楚地表明您不应依赖默认位置(可能是/Program Files/或类似的),而必须使用不包含任何空格的路径。如果你没有注意到这一点,那是你的错。

作为最新版本,您可以通过确保已在非空间路径中正确安装 flex(和 bison),然后下载 2.25 并构建整个 binutils 而不是单独使用黄金来获得黄金工作。

我希望这个分析对后来发现类似问题的人有用。

于 2015-01-22T21:58:49.880 回答