Forum: PC-Programmierung MinGW Linkerfehler??


von Martin (Gast)


Lesenswert?

Hallo.

Ich programmiere schon recht lange mit c/c++, aber nur Kommandozeile. 
Nun bin ich gerade dabei mit MinGW mein erstes Windows programm zu 
erstellen.

Der Programmcode sieht so aus.
1
#include <windows.h>
2
3
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
4
5
int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPreInstance, PSTR szCmdLine, int iCmdShow)
6
{
7
8
  
9
  static TCHAR szAppName[] = TEXT ("hallo");
10
  HWND    hwnd;
11
  MSG     msg;
12
  WNDCLASS   wndclass;
13
  
14
  wndclass.style      = CS_HREDRAW | CS_VREDRAW ;
15
  wndclass.lpfnWndProc  = WndProc;
16
  wndclass.cbClsExtra    = 0;
17
  wndclass.cbWndExtra    = 0;
18
  wndclass.hInstance    = hInstance;
19
  wndclass.hIcon      = LoadIcon (NULL, IDI_APPLICATION);    // lädt ein Icon für das Programm
20
  wndclass.hCursor    = LoadCursor (NULL, IDC_ARROW );    // lädt einen MausCursor für das Programm
21
  wndclass.hbrBackground  = (HBRUSH) GetStockObject (WHITE_BRUSH);
22
  wndclass.lpszMenuName  = NULL;
23
  wndclass.lpszClassName = szAppName;
24
  
25
  hwnd = CreateWindow (
26
            szAppName,
27
            TEXT ("Das"),
28
            WS_OVERLAPPEDWINDOW,
29
            CW_USEDEFAULT,
30
            CW_USEDEFAULT,
31
            CW_USEDEFAULT,
32
            CW_USEDEFAULT,
33
            NULL,
34
            NULL,
35
            hInstance,
36
            NULL
37
            );
38
            
39
  ShowWindow (hwnd, iCmdShow);
40
  UpdateWindow (hwnd);
41
  
42
  while (GetMessage (&msg, NULL, 0 , 0))
43
  {
44
    TranslateMessage( &msg);
45
    DispatchMessage (&msg);
46
  }
47
  
48
  return msg.wParam;
49
            
50
}
51
  
52
  
53
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
54
{
55
56
  HDC hdc;
57
  PAINTSTRUCT ps;
58
  RECT  rect;
59
  
60
  switch(message)
61
  {
62
  
63
  }
64
  
65
66
  return DefWindowProc ( hwnd, message, wParam, lParam);
67
68
}

OK. Das Programm macht nicht viel...

Bei compilieren bekomme ich folgenden Fehler:

C:\ccode\00002_createFenster>g++ messagebox.c -o messagebox
C:\DOCUME~1\Schepper\LOCALS~1\Temp/cc87wcu8.o:messagebox.c:(.text+0x67): 
undefin
ed reference to `GetStockObject@4'
collect2: ld returned 1 exit status

Im Internet habe ich schon gesucht. Hier schreiben die, dass wäre ein 
Linker fehler wegen irgendeiner LIB...


Was muss ich konkret eingeben, dass es compiliert werden 
kann??????????????

Sonst habe ich immer mit MS Prdukte gearbeitet...

Vielen Dank für eure Unterstützung.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Martin schrieb:
> C:\ccode\00002_createFenster>g++ messagebox.c -o messagebox
> C:\DOCUME~1\Schepper\LOCALS~1\Temp/cc87wcu8.o:messagebox.c:(.text+0x67):
> undefin
> ed reference to `GetStockObject@4'
> collect2: ld returned 1 exit status
>
> Was muss ich konkret eingeben, dass es compiliert werden
> kann?

Mit gcc für C-Projekte statt mit g++ (für C++-Projekte) arbeiten.

von Mario G. (mario)


Lesenswert?

Für Oberflächen würde ich die FLTK library nehmen, da spart man sich ne 
Menge Ärger und ist supereinfach zu bedienen: www.fltk.org

Ein Tip: Lehn dich zurück und schau die Tutorials an: 
http://seriss.com/people/erco/fltk-videos/

Gruß
Mario

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Stefan B. schrieb:

> Mit gcc für C-Projekte statt mit g++ (für C++-Projekte) arbeiten.

Und:

SuperKoko schrieb am August 23rd, 2006, 03:43 PM:
> GetStockObject is defined in libgdi32.a so you should add -lgdi32
http://www.codeguru.com/forum/archive/index.php/t-397927.html

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.