This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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

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:
Unsubscribe info:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]