Dear Agner,

> But the compiler generates a Windows executable following most of the
> Windows ABI (object file format, calling convention, etc.)

Still cygwin is intentionally very different from Windows, e.g. on Cygwin you 
use / as path separator, on Windows you use \ as path separator. Cygwin console 
executables produce \n line endings, MinGW produce \r\n line endings. Cygwin 
executables go through path translation (C:\ is /cygdrive/c/) ... Many C 
programs will consult __WINDOWS__ to find out what the path separator should be 
and this would go wrong if cygwin gcc would define __WINDOWS__. I would see 
Cygwin as a lightweight Posix virtual environment on Windows. If you run gcc on 
the Linux Subsystem for Windows you also wouldn't expect it to define 
__WINDOWS__. In a sense the reason Cygwin exists is that it has a gcc which 
defined __unix__.

As was mentioned before, if you goal is to create Windows ABI compatible 
binaries, you should use the MinGW cross compiler, which is available as 
package for Cygwin (mingw64-x86_64-... ). Please note that you should use a 64 
bit cygwin to create 64 bit binaries and a 32 bit Cygwin to create 32 bit 
binaries. This is because the Windows filesystem has a hack that 32 and 64 bit 
DLLs have the same filename and which one you get depends on if you are a 32 
bit or 64 bit executable. So 64 bit linker which is a 32 bit executable trying 
to create a 64 bit binary would see the wrong DLLs and vice versa.

Another option is to use a MinGW, MSys or MSys2 distribution - I personally 
prefer Cygwin exactly because it does this stricter separation between a Posix 
world and a Windows world. But if you main goal is to have a gcc for Windows, 
Cygwin might not be the best choice for you.

Best regards,

Michael
Intel Deutschland GmbH
Registered Address: Am Campeon 10-12, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de
Managing Directors: Christin Eisenschmid, Gary Kershaw
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928

--
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

Reply via email to