2012-05-08 73 views
12

MinGW-w64至少从December 2010开始可用于Cygwin。 但是我很难用它来编译几乎任何东西。我已经设定的符号链接与alternatives如何在Cygwin中使用MinGW-w64?

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使用MinGW GCC壳
  • Cygwin的外壳使用Cygwin GCC(gcc4-core

然后Wget的将编译。

基于关闭AK2答案,这似乎工作

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

回答

19

ak2如所述here部分不正确。

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

  • --build:你正在构建
  • --host什么:你正在建设什么
  • --target:如果你正在构建是一个交叉编译器,这是什么交叉编译器将建立对于。
6

Cygwin的MinGW的-W64编译器是一个交叉编译器,因为其托管在Cygwin,但瞄准的MinGW-W64。你只需要使用--target选项告诉configure一下,像这样:

--target=x86_64-w64-mingw32 

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

弯曲备选系统让/usr/bin中的工具指向MinGW-w64的工具并不是一个好主意,因为这样你将在MinGW工具中使用Cygwin头文件和库,这会导致类似错误的错误你在上面引用。

+0

我已经在Cygwin中安装了'mingw64-x86_64-gcc-g ++'软件包。但是,'哪个g ++'不显示任何'g ++'。已安装的'mingw64'编译器在哪里?对于这个'mingw64-x86_64-gcc-g ++',我应该在'./configure --target = ???' – Admia