Zombo
Zombo

Reputation: 1

How to use MinGW-w64 with Cygwin?

MinGW-w64 has been available with Cygwin at least since December 2010. However I am having hard time using this to compile almost anything. I have set symbolic links with 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

For example if I try to compile wget

./configure --without-ssl
make

Errors (edited for brevity)

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'

If I use

Then Wget will compile.

Based off ak2 answer, this seems to work

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

Upvotes: 13

Views: 16512

Answers (2)

Jonathan Baldwin
Jonathan Baldwin

Reputation: 877

ak2 is partially incorrect as stated here.

The correct option is --host=x86_64-w64-mingw32, as you found out. --target is used for building a cross-compiler itself. The options are:

  • --build: What you are building on
  • --host: What you are building for
  • --target: If what you are building is a cross-compiler, what that cross-compiler will build for.

Upvotes: 23

ak2
ak2

Reputation: 6778

Cygwin's MinGW-w64 compiler is a cross-compiler, because it's hosted on Cygwin but targeting MinGW-w64. You just need to tell configure about it using the --target option, like so:

--target=x86_64-w64-mingw32

That way, make will be invoking the appropriate tools. You'll also need to install or build MinGW-w64 versions of any libraries that the package you're trying to build depends on.

Bending the alternatives system to have the tools in /usr/bin point at the MinGW-w64 ones is not a good idea, because that way you'll be using MinGW tools with Cygwin headers and libraries, which leads to errors like the ones you quoted above.

Upvotes: 7

Related Questions