如何在Cygwin中使用MinGW-w64?

13
2010年12月以来,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 gcc(gcc4-core)的Cygwin shell

然后Wget将被编译。

根据ak2的答案,这似乎有效。

./configure --host=x86_64-w64-mingw32 --disable-ipv6 --without-ssl
make
2个回答

23

ak2在这里部分陈述是不正确的。

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

  • --build:你正在构建的系统
  • --host:你正在为其构建的系统
  • --target:如果你正在构建交叉编译器,那么交叉编译器将会建立哪个系统。

7

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

--target=x86_64-w64-mingw32

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

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


我已经在Cygwin中安装了mingw64-x86_64-gcc-g++软件包。然而,which g++没有显示任何g++。安装的mingw64编译器在哪里?对于这个mingw64-x86_64-gcc-g++,我应该在./configure --target=???中设置什么? - Admia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接