This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: Providing cygwin1.dll in both 32- and 64-bit versions
- From: Hans-Bernhard Bröker <HBBroeker at t-online dot de>
- To: cygwin at cygwin dot com
- Date: Thu, 2 Feb 2017 23:10:36 +0100
- Subject: Re: Providing cygwin1.dll in both 32- and 64-bit versions
- Authentication-results: sourceware.org; auth=none
- References: <5893A0CD.5090107@junovagen.se>
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