ld : undefined reference to `getPixel'
-
Hi !
Ich benutze folgenden Code:
for( int i = 1 ; i <= image->w; ++i ) { for( int j = 1; j <= image->h; ++j ) { Uint32 pixel = getPixel( image, i , j); } }
Bzw das ist ein Ausschnitt. Wenn ich das ganze dann kompiliere erhalte ich folgende Fehlermeldung:
tom@tomcom:~/Eigene Dateien/Programmieren/C++ Workspace/Game> make gcc -c `sdl-config --cflags` -std=c99 LevelLoader.c LevelLoader.c: In function `writeRawDataFromSurfaceToFile': LevelLoader.c:22: warning: implicit declaration of function `getPixel' gcc `sdl-config --libs` -lSDL_image -std=c99 LevelLoader.o -o LevelLoader LevelLoader.o(.text+0x71): In function `writeRawDataFromSurfaceToFile': : undefined reference to `getPixel' collect2: ld returned 1 exit status make: *** [LevelLoader] Fehler 1
Muss ich hier nach was einbinden beim Kompilieren ?
thx
Tom
-
Kannst getPixel auch selbst schreiben.
Bye, TGGC (Pipe my World.)
-
probier doch mal stattdessen "getpixel" (P klein)....
-
TGGC schrieb:
Kannst getPixel auch selbst schreiben.
Bye, TGGC (Pipe my World.)
Gute Idee hab den Quellcode direkt in mein Programm reinkopiert. Denke mal jetzt funktionierts...Zumindest meckert jetzt niemand mehr wenn ich make ausführe.
Tom
-
Tachchen nochmal !
Also ich habe ja den Code kopiert und in mein Programm reinkopiert. Die Methode scheint auch ganz gut zu funktionieren, allerdings nur mit kleineren Bildern. Ich zunächst ein 12x12 PNG eingelesen. Keine Fehler. Jetzt probiere ich mich mit einem PNG von 1680x1050 und erhalte immer in der Zeile 1373 einen Speicherzugriffsfehler. Ich würde mich freuen wenn mal jemand kurz meinen Code hier ausprobieren könnte. Ich hab jedenfalls keine Ahnung wo hier ein Speicherzugriffsfehler stattfindet ??
#include "SDL.h" #include "SDL_image.h" #include <stdlib.h> #include <stdio.h> void testGetpixel( SDL_Surface* image); Uint32 getpixel(SDL_Surface *surface, int x, int y); int main() { if( SDL_Init(SDL_INIT_VIDEO) < 0 ) { fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); exit(1); } SDL_RWops *rwop; rwop=SDL_RWFromFile("Map1.png", "rb"); SDL_Surface* map = IMG_LoadPNG_RW( rwop ); testGetpixel( map ); } void testGetpixel( SDL_Surface* image) { for( int i = 1 ; i <= image->w; ++i ) { for( int j = 1; j <= image->h; ++j ) { if( j % 15 == 0) printf("%d x %d\n", i ,j); else printf("%d x %d; ", i ,j); Uint32 pixel= getpixel( image, i , j); } } } Uint32 getpixel(SDL_Surface *surface, int x, int y) { int bpp = surface->format->BytesPerPixel; /* Here p is the address to the pixel we want to retrieve */ Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp; switch(bpp) { case 1: return *p; case 2: return *(Uint16 *)p; case 3: if(SDL_BYTEORDER == SDL_BIG_ENDIAN) return p[0] << 16 | p[1] << 8 | p[2]; else return p[0] | p[1] << 8 | p[2] << 16; case 4: return *(Uint32 *)p; default: return 0; /* shouldn't happen, but avoids warnings */ } }
Kompiliert habe ich das Ganze mit
gcc -c `sdl-config --cflags` -std=c99 test.c gcc -o test test.o `sdl-config --libs` -lSDL_image -std=c99