1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
<sect1 id="gcc"><title>Using GCC with Cygwin</title>
<sect2 id="gcc-cons"><title>Console Mode Applications</title>
<para>Use gcc to compile, just like under UNIX.
Refer to the GCC User's Guide for information on standard usage and
options. Here's a simple example:</para>
<example>
<title>Building Hello World with GCC</title>
<screen>
<prompt>C:\cygnus\></prompt> <userinput>gcc hello.c -o hello.exe</userinput>
<prompt>C:\cygnus\></prompt> <userinput>hello.exe</userinput>
Hello, World
<prompt>C:\cygnus\></prompt>
</screen>
</example>
</sect2>
<sect2 id="gcc-gui"><title>GUI Mode Applications</title>
<para>Cygwin allows you to build programs with full access to the
standard Windows 32-bit API, including the GUI functions as defined in
any Microsoft or off-the-shelf publication. However, the process of
building those applications is slightly different, as you'll be using
the GNU tools instead of the Microsoft tools.</para>
<para>For the most part, your sources won't need to change at all.
However, you should remove all __export attributes from functions
and replace them like this:</para>
<screen>
int foo (int) __attribute__ ((__dllexport__));
int
foo (int i)
</screen>
<para>For most cases, you can just remove the __export and leave it at
that. For convenience sake, you might want to include the following
code snippet when compiling GUI programs. If you don't, you will want
to add "-e _mainCRTStartup" to your link line in your Makefile.</para>
<screen>
#ifdef __CYGWIN__
WinMainCRTStartup() { mainCRTStartup(); }
#endif
</screen>
<para>The Makefile is similar to any other UNIX-like Makefile,
and like any other Cygwin makefile. The only difference is that you use
<command>gcc -mwindows</command> to link your program into a GUI
application instead of a command-line application. Here's an example:</para>
<screen>
myapp.exe : myapp.o myapp.res
gcc -mwindows myapp.o myapp.res -o $@
myapp.res : myapp.rc resource.h
windres $< -O coff -o $@
</screen>
<para>Note the use of <filename>windres</filename> to compile the
Windows resources into a COFF-format <filename>.res</filename> file.
That will include all the bitmaps, icons, and other resources you
need, into one handy object file. Normally, if you omitted the "-O
coff" it would create a Windows <filename>.res</filename> format file,
but we can only link COFF objects. So, we tell
<filename>windres</filename> to produce a COFF object, but for
compatibility with the many examples that assume your linker can
handle Windows resource files directly, we maintain the
<filename>.res</filename> naming convention. For more information on
<filename>windres</filename>, consult the Binutils manual. </para>
</sect2>
</sect1>
|