13

MinGW-w64 は、少なくとも2010 年 12 月以降、Cygwin で利用できるようになりました。ただし、これを使用してほとんど何でもコンパイルするのに苦労しています。代替とのシンボリックリンクを設定しました

p=x86_64-w64-mingw32
alternatives \
    --install /usr/bin/gcc.exe gcc /usr/bin/$p-gcc.exe 0 \
    --slave /usr/bin/ar.exe ar /usr/bin/$p-ar.exe

たとえば、コンパイルしようとするとwget

./configure --without-ssl
make

エラー(簡潔にするために編集)

connect.o:connect.c:(.text+0x3f): undefined reference to `__imp_htons'
connect.o:connect.c:(.text+0xbe7): undefined reference to `__imp_ntohs'
connect.o:connect.c:(.text+0xd96): undefined reference to `run_with_timeout'

私が使用する場合

  • MinGW gcc を使用した MinGW シェル
  • Cygwin gcc を使用した Cygwin シェル ( gcc4-core)

次に、Wget がコンパイルされます。

ak2の回答に基づいて、これはうまくいくようです

./configure --host=x86_64-w64-mingw32 --disable-ipv6 --without-ssl
make
4

2 に答える 2

23

ここに記載されているように、ak2 は部分的に正しくありません。

ご存じのとおり、正しいオプションは--host=x86_64-w64-mingw32です。--targetクロスコンパイラ自体を構築するために使用されます。オプションは次のとおりです。

  • --build: 何を構築しているか
  • --host: 何のために構築しているのか
  • --target: ビルドしようとしているのがクロス コンパイラの場合、そのクロス コンパイラは何のためにビルドするのか。
于 2013-03-01T01:35:18.567 に答える
7

CygwinのMinGW-w64コンパイラは、Cygwinでホストされているが、MinGW-w64を対象としているため、クロスコンパイラです。次のように、オプションconfigureを使用してそれについて伝える必要があります。--target

--target=x86_64-w64-mingw32

そうmakeすれば、適切なツールを呼び出すことができます。また、ビルドしようとしているパッケージが依存しているライブラリのMinGW-w64バージョンをインストールまたはビルドする必要があります。

代替システムを曲げて、ツールを/usr/binMinGW-w64のものに合わせるのは良い考えではありません。そうすると、CygwinヘッダーとライブラリでMinGWツールを使用することになり、上記で引用したようなエラーが発生するからです。

于 2012-05-08T07:27:00.233 に答える