Linker error undefined reference to '[email protected]'

Odpowiedz Nowy wątek
2011-09-28 22:03
0
LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{

 switch (msg)
 {
  case WM_LBUTTONDOWN:
  {
   HDC hdc = GetDC (hwnd);
   LineTo (hdc, LOWORD (lParam), HIWORD (lParam));
   ReleaseDC (hwnd, hdc);
  }
  break;
  case WM_LBUTTONDBLCLK:
  {
   HDC hdc = GetDC (hwnd);
   Ellipse (hdc, LOWORD (lParam) - 3, HIWORD (lParam) - 3, LOWORD (lParam) + 3, HIWORD (lParam) + 3);
   ReleaseDC (hwnd, hdc);
  }
  break;
  case WM_CLOSE:
   DestroyWindow (hwnd);
  break;

  case WM_DESTROY:
   PostQuitMessage (0);
  break;

  default:
   return DefWindowProc (hwnd, msg, wParam, lParam);
  }

 return 0;
}

Podczas kompilacji wywala mi:
[Linker error] undefined reference to [email protected]' [Linker error] undefined reference to[email protected]'

Pozostało 580 znaków

2011-09-28 22:13
0

No i jak myślisz, co kompilator podpowiada? Może to, że nie potrafi nigdzie znaleźć czegoś takiego jak nazwy tych funkcji?
Wejdź tutaj: http://msdn.microsoft.com/en-us/library/dd145029(v=vs.85).aspx a później tutaj: http://msdn.microsoft.com/en-us/library/dd162510(v=vs.85).aspx i sprawdź jakie są wymagania (podpowiem: Requirements) dla danych funkcji i dołącz odpowiednie biblioteki, żeby linker wiedział gdzie może te funkcje znaleźć..


Pozdro & poćwicz!
okay dołączyłem header <Windows.h> ale undefined, dlatego pytam bo nie wiem co jest grane? - czarny020 2011-09-28 22:30

Pozostało 580 znaków

2011-09-28 22:41
0

Nie kompilator podpowiada tyko linker ;)
Musisz jeszcze dołączyć mu(linkerowi) bibliotekę Gdi32.lib


Pozostało 580 znaków

2011-09-28 22:50
0

powiem Ci tak:

  • kompilator kompiluje wszystkie pliki .cpp osobno, do kodu dosłownie dołącza to co jest napisane w plikach .h
  • z każdego pliku .cpp kompilator robi sobie listę symboli: zmiennych globalnych, funkcji itd.
  • dołączając pliki .h z nagłówkami funkcji mówisz kompilatorowi: gdzieś znajduje się symbol XY, załóż że on istnieje i używaj go
  • wszystko się pięknie kompiluje i dostajesz zestaw plików .a, .lib, .o lub innych w zależności od kompilatora, ale do pliku exe jeszcze kawałek drogi,
  • teraz przychodzi kolej na linkera, skleja on wszystkie pliki o których wspomniałem wyżej w jeden plik .EXE (na windowsie, na linuksie dostajesz plik o bliżej nieokreślonym rozszerzeniu, ale da się go odpalić),
  • linker sprawdza sobie jakie symbole zostały użyte w każdym z tych plików i sprawdza czy jakiegoś nie brakuje,
  • jeśli wszystko jest to dostajesz piękny i świeży plik EXE,
  • jeśli czegoś zabrakło to dostajesz błąd, że odniesienie do symbolu jest nieokreślone: undefined reference to ...

dodam, że nie tylko programy napisane w C++ kompilują się do takiego formatu. programy napisane w C, assemblerze i innych językach też mogą się do takiego formatu kompilować (czasami jest to inny podobnie działający format)

rozwiązanie na Twój problem:

  • znaleźć plik .cpp/.c, który po skompilowaniu da ci brakujący symbol (o tym zapomnij, bo MS nie da ci takiego pliku)
  • znaleźć plik o rozszerzenie .a/.lib/... w którym ten symbol jest zawarty - ten plik powinien znajdować się w folderze lib w którymś z folderów kompilatora - znajdź w internecie jego nazwę i dołącz go do projektu.

EDIT: @byku_guzio napisał ci jaka to biblioteka, mam nadzieje ze sobie poradzisz :P


░█░█░█░█░█░█░█░█░█░█░█░
edytowany 1x, ostatnio: krwq, 2011-09-28 22:51

Pozostało 580 znaków

2011-09-29 00:37
0

dzięki, domyślałem się, że chodzi o tą bibliotekę, tylko nie bardzo wiem jak ją dołączyć, będę wdzięczny za pomoc.

Pozostało 580 znaków

2011-09-29 00:43
0

w opcjach linkera?


░█░█░█░█░█░█░█░█░█░█░█░

Pozostało 580 znaków

2011-09-29 15:15
0

KURWA! przeczytałeś mój przedpoprzedni post (ten długi)?

kompilator -> pliki źródłowe
linker -> skompilowane obiekty


░█░█░█░█░█░█░█░█░█░█░█░
edytowany 1x, ostatnio: krwq, 2011-09-29 15:17

Pozostało 580 znaków

2011-09-29 17:30
0

korzystam z dev-C++ i nie bardzo wiem jak to obsłużyć, dlatego proszę w tej kwesti o dokładną pomoc.

edytowany 1x, ostatnio: czarny020, 2011-09-29 17:30

Pozostało 580 znaków

2011-09-29 19:52

Wejdź sobie w opcje projektu czy jak to tam w tym czymś wygląda, znajdź opcje linkera i w tych opcjach dodaj mu brakującą bibliotekę i tyle. Wcześniej jednak lepiej zmień dev'a na coś cywilizowanego.


np na Code::Blocks - krwq 2011-09-30 09:56

Pozostało 580 znaków

2011-09-30 09:58
1

i projekt utwórz


░█░█░█░█░█░█░█░█░█░█░█░

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0