Providing cygwin1.dll in both 32- and 64-bit versions

Hans-Bernhard Bröker HBBroeker@t-online.de
Thu Feb 2 22:10:00 GMT 2017


Am 02.02.2017 um 22:12 schrieb Thomas Nilefalk:

> Using 'i686-pc-cygwin-gcc' creates an executable but that is un-runnable
> in a Cygwin64 environment because the cygwin1.dll is a 64-bit version
> and not compatible with the produced executable. A cygwin32 DLL needs to
> be put first in the path to make the executable run.
>
> Is this by design?

Pretty much, yes.  Windows itself already has a seriously hard time 
mixing and matching 32-bit and 64-bit executables and their DLLs.  The 
tricks MS uses to pull that off range from outright scary to 
Marx-Brothers-grade hilarious, depending how you look at them.

As I see it, Cygwin rightfully opted for sanity here by keeping the two 
worlds separate.

> At least it seems to me that 'gcc -m32' could be
> taken to mean 'create an executable in the current ABI-environment
> (cygwin64) which uses a 32-bit architecture'.

No, it really can't.  -m32 does what the GCC documentation says: it 
makes GCC generate 32-bit x86 code.  Nothing in there so much as 
suggests that such code will actually work in a given ABI environment. 
In the case of Cygwin64 it won't.

> 'how can I make a 32-bit compiled cygwin program run under cygwin64'?

You can't. Nor can anybody else.  For a Cygwin64-based program, Cygwin32 
is a bona fide cross-compilation platform rather than just some subset 
of the same platform.  The same holds vice versa.

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list