Forum: Kompilerings problem.

Forum huvudsida -> Programmering -> Kompilerings problem.

Sidor: 1

Till botten

skalman93 21:25 - 4:e December 2008 | Post #1
Medlem
Inlägg: 8


Skicka PM
Hej! Jag har försökt följa Independences guide om SDL grafik men när jag försöker compilera
  1. #ifdef WIN32
  2. #pragma comment(lib, "SDL.lib")
  3. #pragma comment(lib, "SDLmain.lib")
  4. #endif
  5.  
  6. #include "SDL.h"
  7. #include <iostream>
  8.  
  9. using namespace std;
  10.  
  11. int DisplayImage(SDL_Surface* destination, const char*, int x, int y)
  12. {
  13. SDL_Surface* image;
  14. image = SDL_LoadBMP("test.bmp");
  15. if (image = NULL)
  16. {
  17. cout << "Image could not me loaded" << endl;
  18. return 1;
  19. }
  20.  
  21. SDL_Rect rect;
  22. rect.x = x;
  23. rect.y = y;
  24. rect.w = image->w;
  25. rect.h = image->h;
  26.  
  27. SDL_BlitSurface(image, NULL, destination, &rect);
  28.  
  29. return 0;
  30. }
  31.  
  32. int main()
  33. {
  34. SDL_Surface *screen;
  35. SDL_Event event;
  36. int imgX=0,imgY=10;
  37.  
  38. if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 )
  39. {
  40. cout << "Unable to initialize SDL: " << SDL_GetError() << endl;
  41. SDL_Quit();
  42. return 1;
  43. }
  44. else
  45. {
  46. cout << "SDL initialized successfully" << endl;
  47. }
  48.  
  49. screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE|SDL_DOUBLEBUF);
  50.  
  51. if(screen == NULL)
  52. {
  53. cout << "Unable to set video mode: " << SDL_GetError() << endl;
  54. SDL_Quit();
  55. return 1;
  56. }
  57. else
  58. {
  59. cout << "Successfully set video mode!" << endl;
  60. }
  61. while(1)
  62. {
  63. SDL_PollEvent(&event);
  64. switch (event.type)
  65. {
  66. case SDL_QUIT:
  67. cout << "Terminating program!" << endl;
  68. SDL_Quit();
  69. return 0;
  70. case SDL_KEYDOWN:
  71. Uint8 *keys;
  72.  
  73. keys = SDL_GetKeyState(NULL);
  74. if (keys[SDLK_UP])
  75. imgY -=5;
  76. if (keys[SDLK_DOWN])
  77. imgY += 5;
  78. if (keys[SDLK_LEFT])
  79. imgX -= 5;
  80. if (keys[SDLK_RIGHT])
  81. imgX += 5;
  82. if (keys[SDLK_ESCAPE])
  83. {
  84. cout << "Terminating program!" << endl;
  85. SDL_Quit();
  86. return 0;
  87. }
  88. }
  89. DisplayImage(screen, "test.bmp", imgX, imgY);
  90. SDL_Flip(screen);
  91. SDL_Delay(25);
  92.  
  93. SDL_Quit();
  94.  
  95. return 0;
  96. }
  97. }


Får jag compiler outputen:


Compiler: Default compiler
Building Makefile: "Z:KällkodLalalaMakefile.win"
Executing make...
make.exe -f "Z:KällkodLalalaMakefile.win" all
windres.exe -i Project1_private.rc --input-format=rc -o Project1_private.res -O coff

g++.exe main.o Project1_private.res -o "Project1.exe" -L"C:/Dev-Cpp/lib" -mwindows -lSDLmain -lSDL

C:/Dev-Cpp/lib/libmingw32.a(main.o)(.text+0x106):main.c: undefined reference to `WinMain@16'
collect2: ld returned 1 exit status

make.exe: *** [Project1.exe] Error 1

Execution terminated


Vad är felet?

//Skalman




Slash 06:24 - 5:e December 2008 | Post #2
Medlem
Inlägg: 141


Skicka PM
main.c: undefined reference to `WinMain@16'

Om du får "undefined reference to 'WinMain@16' så beror det troligen på att du skapat ett win-projekt istället för ett console-projekt.

Alltså, skapa ett nytt projekt som är ett console-projekt, och se om du för några länkningsproblem då.

Dessutom brukar man skriva C++ i .cpp-filer och inte .c-filer, men eftersom du får ett länkningsfel och inte ett kompileringsfel (den kompilerar ju trots allt med g++) så borde inte det vara det som ger det felet. Utan som sagt projekt-typen.

-------------------------
Ingen sigantur!



skalman93 13:28 - 5:e December 2008 | Post #3
Medlem
Inlägg: 8


Skicka PM
Det var inte det, gjorde ett nytt konsol project men jag fick samma fel. Och vad merar du med .c? har ingen fil med den ändelsen, den heter main.cpp Smiley




tobbez 13:54 - 5:e December 2008 | Post #4
Medlem
Inlägg: 364


Skicka PM
Försök med att byta ut "int main()" mot "int main(int argc, char *argv[])".




skalman93 14:28 - 5:e December 2008 | Post #5
Medlem
Inlägg: 8


Skicka PM
Nope, löste inte problemet...




Vitdom 10:07 - 14:e December 2008 | Post #6
Medlem
Inlägg: 71


Skicka PM
byt ut
int main()
mot
int main(int argc, char *argv[])

Pröva också lägga till(efter L"C:/Dev-Cpp/lib")
-lmingw32
till parametrar till kompilatorn.

-------------------------





Sidor: 1

Forum huvudsida -> Programmering -> Kompilerings problem.
Atom feed

Du får inte posta i den här tråden | Till toppen