Win32 example/tutorial with GC?
Johnny
johnnykiro at gmail.com
Tue May 1 13:14:23 PDT 2007
Hi Frits
I added the empty main() and the linking succeeds, however, the program
does nothing since the entry point (main() ) returns immediately (which
is expected.
So may be the good question is how to make GDC accept WinMain as an
entry point for Windows GUI programs.
Strangely, I have another simpler GUI program that links correctly with
WinMain:
import win32.winbase;
import win32.windef;
import win32.winuser;
extern(Windows) int WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR szCmdLine,
int iCmdShow)
{
MessageBoxA(null, "Hello", "Hello Demo", MB_OK);
return (0);
}
- Here is how I compile it:
Administrator at home /cygdrive/c/D-Projects/gdc-test
$ gdc -c gdctestwin.d -I"C:\dmd"
- Attempting to link with GDC fails:
Administrator at home /cygdrive/c/D-Projects/gdc-test
$ gdc -o gdctestwin.exe gdctestwin.o
/mingw/lib/libgphobos.a(cmain.o):(.text+0x19): undefined reference to
`_Dmain'
collect2: ld returned 1 exit status
- Linking with GCC sycceeds:
Administrator at home /cygdrive/c/D-Projects/gdc-test
$ gcc -o gdctestwin.exe gdctestwin.o
- I tried to use GCC for linking my 1st example, but I get other errors:
$ gcc -Wall -o WinMenu-gdc.exe WinMenu.o
WinMenu.o:WinMenu.d:(.text+0xe7): undefined reference to
`_D3std6string9toStringzFAaZPa'
WinMenu.o:WinMenu.d:(.text+0xfb): undefined reference to
`_D3std6string9toStringzFAaZPa'
WinMenu.o:WinMenu.d:(.text+0x152): undefined reference to
`CreateWindowA at 44'
WinMenu.o:WinMenu.d:(.text+0x17e): undefined reference to `_d_assert'
WinMenu.o:WinMenu.d:(.text+0x269): undefined reference to `LOWORD at 4'
WinMenu.o:WinMenu.d:(.text+0x35a): undefined reference to `_Dmodule_ref'
WinMenu.o:WinMenu.d:(.text+0x365): undefined reference to `_Dmodule_ref'
WinMenu.o:WinMenu.d:(.data+0x48): undefined reference to
`_D3std6string12__ModuleInfoZ'
WinMenu.o:WinMenu.d:(.data$_D31TypeInfo_E7WinMenu11__anonymous6__initZ[__D31TypeInfo_E7WinMenu11__anonymous6__initZ]+0x0):
undefined reference to `_D13TypeInfo_Enum6__vtblZ'
WinMenu.o:WinMenu.d:(.data$_D31TypeInfo_E7WinMenu11__anonymous6__initZ[__D31TypeInfo_E7WinMenu11__anonymous6__initZ]+0x8):
undefined reference to `_D10TypeInfo_i6__initZ'
collect2: ld returned 1 exit status
- And here I added Phobos, but I get 1st error:
$ gcc -Wall -o WinMenu-gdc.exe WinMenu.o -lgphobos
/mingw/lib/libgphobos.a(cmain.o):(.text+0x19): undefined reference to
`_Dmain'
collect2: ld returned 1 exit status
So I'm confused :-( .. what are the definitive steps to compile and link
a Windows GUI program using GDC/MinGW?
Regards,
john
Frits van Bommel wrote:
> Johnny wrote:
>> It seems that the Phobos library itself refers to _Dmain and linker
>> can't find it, so where is _Dmain, and why isn't it found?
>
> "_Dmain" is how the "main" of your program normally gets renamed
> ("mangled") by the D compiler. It's not found because you didn't write
> one :).
> What happens if you add an empty "void main() {}" ?
>
> I'm pretty sure the Windows version of DMD (or perhaps optlink) will
> automatically use WinMain instead of main if it sees it, but I'm not
> sure about GDC/MinGW. Maybe some special command-line option needs to be
> passed?
More information about the D.gnu
mailing list