5

GNU binutils に含まれるゴールド リンカーを mingw を使用してビルドしようとしています。私がとった手順は-

  1. インストーラーを使用してすべてのパッケージで mingw をインストールします。
  2. Windows インストーラーを使用して、Windows バージョンの FLEX をデフォルトの場所にインストールします。
  3. 正常に動作しているように見える mingw シェルからゴールド リンカー ディレクトリで ./configure を実行します。
  4. make を実行すると、エラーが発生します。

./configure と make の完全な出力をここのペーストビンに含めました: 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 なしでゴールドのみをビルドすると、ビルドされないことがわかりました。とを実行する./configuremake、最上位レベルで金の罰金が築かれます。そして、(不必要cd goldではありますが) and を実行すると、正常に動作します。./configuremake

ゴールドだけで失敗した場合、ビルドよりもさらに進んだことがわかりました.

FLEX to the default locationというフレーズにも注目しました。/Program Files/FLEX の手順では、デフォルトの場所 (または類似している可能性があります) に依存するべきではなく、スペースを含まないパスを使用する必要があることを明確にしています。これに気付かなかったのなら、それはあなたのせいです。

最新のビルドでは、スペース以外のパスに flex (および bison) を適切にインストールし、2.25 をダウンロードして、ゴールドだけではなく binutils 全体をビルドすることで、ゴールドを機能させることができます。

この分析が、後で同様の問題を見つけた人に役立つことを願っています。

于 2015-01-22T21:58:49.880 に答える