如何在Cygwin中使用MinGW-w64?

时间:2012-05-08 05:56:12

标签: gcc cygwin mingw mingw-w64

至少从December 2010起,MinGW-w64已经与Cygwin一起使用。 但是我很难用它来编译几乎任何东西。我已经设置了alternatives

的符号链接
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 shell
  • Cygwin shell与Cygwin gcc(gcc4-core

然后Wget将编译。

根据ak2回答,这似乎有效

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

2 个答案:

答案 0 :(得分:21)

ak2部分不正确,如here所述。

正如您所发现的,正确的选项是--host=x86_64-w64-mingw32--target用于构建交叉编译器本身。选项包括:

  • --build:您正在构建的内容
  • --host:您正在构建的内容
  • --target:如果您正在构建的是交叉编译器,那么交叉编译器将构建什么。

答案 1 :(得分:7)

Cygwin的MinGW-w64编译器是一个交叉编译器,因为它托管在Cygwin上,但目标是MinGW-w64。您只需要使用configure选项告诉--target,如下所示:

--target=x86_64-w64-mingw32

这样,make将调用适当的工具。您还需要安装或构建您尝试构建的软件包依赖的任何库的MinGW-w64版本。

弯曲替代系统以使/usr/bin中的工具指向MinGW-w64的工具并不是一个好主意,因为这样你将使用带有Cygwin标头和库的MinGW工具,这会导致错误就像你上面引用的那些。