SDL_image
-
Neulich wollte ich ein Bild (nicht Bitmap) einfügen... Doch jetzt hab ich Probleme mit der Linkerbefehlszeile. Es kommt dabei immer die Fehlermeldung vom Compiler: "[Linker error] undefined reference to `IMG_Load'"
Ich hab keine Ahnung was ich tun soll, ich hab probiert, die Befehlszeile -lSDL_image hinzuzufügen (-> "cannot find -lSDL_image")
Ich hab aber die Headerdateien in meinem Include-Verzeichnis... Deshalb wüsste ich gerne, wo der Fehler liegt. Ich hab schon viele Dokumentationen und Tutorials gelesen, es hat nichts genützt... Ich wäre froh wenn jemand helfen könnte.
-
Die Refenrenz auf "IMG_Load" ist undefiniert! f'`8k
Gruß, TGGC (\-/ returns)
-
Bei linker Fehlern heisst das meisst das du die lib (SDL_image.lib ?) dem Linker zur Verfügung stellen musst in deinen Compileroptionen.
siehe-> viele Threads mit ähnlichen Problemen.
-
Okay danke es hat geklappt.
Doch jetzt ist ein neues Problem aufgetaucht:
Wenn ich ein JPEG-Bild laden will, zeigt es nur einen schwarzen Bildschirm.
Das komische daran ist, dass es bei GIF-Bildern oder Bitmaps funktioniert. Ich hab den exakten Dateinamen (Gross-/Kleinschreibung und Dateierweiterung (.jpg / .jpeg)) kontrolliert, es liegt nicht daran.
Auch die zuständige Datei für JPEGs ist vorhanden. Ich hab keine Ahnung was ich tun soll... Wäre froh um Hilfe.Hier mein Code:
#include <SDL.h> #include <SDL_image.h> int main(int argc, char *argv[]) { SDL_Init(SDL_INIT_VIDEO); atexit(SDL_Quit); SDL_Surface *display; display = SDL_SetVideoMode(640,480,16,0); SDL_Surface *image; image = IMG_Load("blabla.JPG"); SDL_BlitSurface(image,0,display,0); SDL_UpdateRect(display,0,0,0,0); bool running = true; while(running) { SDL_Event event; while(SDL_PollEvent(&event)) { if (event.type == SDL_KEYDOWN || event.type == SDL_QUIT) { running = false; break; } } } SDL_FreeSurface(image); }
-
Okay, das Problem ist inzwischen gelöst...
Auf der SDL-Seite steht:
As of SDL_image 1.2.5, JPEG, PNG, and TIFF image loading libraries are dynamically loaded, so if you don't need to load those formats, you don't need to include those shared libraries. libpng depends on libz, and libtiff depends on both libz and libjpeg.
Hab ich zuerst nicht gesehen beim Download... Jetzt hab ich einfach die jpeg.dll in das Projektverzeichnis kopiert, es hat geklappt.
Gibt es ausser der Möglichkeit, die benötigten DLL-Programmbibliotheken ins Projektverzeichnis zu kopieren nur noch die, sie ins Win32-Verzeichnis zu tun?
Weil wenn man sie bei den Compiler-Optionen hinzufügt, klappt es nur manchmal...
-
Dlls können so weil ich weiss im exe-Verzeichnis liegen oder in einem Ordner der in %PATH% steht.
mfg
-
Jo ist korrekt, würd mir allerdings überlegen ob du das willst.
Weil wenn du dein Programm dann veröffentlichst musst du immer ein setupprogramm schreiben das die Daten ins Windowsverzeichnis zu den anderen tausend dlls kopiert.
Das Konzept von Windows is da auch nie so wirklcih aufgegangen.
-
dreaddy schrieb:
Jo ist korrekt, würd mir allerdings überlegen ob du das willst.
Weil wenn du dein Programm dann veröffentlichst musst du immer ein setupprogramm schreiben das die Daten ins Windowsverzeichnis zu den anderen tausend dlls kopiert.
Das Konzept von Windows is da auch nie so wirklcih aufgegangen.Ist das bei Linux mit den shared libs nicht genau das gleiche?!
-
Nein, bei Linux ist das _viieeel_ besser. f'`8k
Gruß, TGGC (\-/ returns)
-
Okay, danke...
Ich hab nur gedacht, da ich schon 3 Dlls brauche, nur um ein JPEG anzuzeigen, könnte das sich mit der Zeit recht häufen... Wie managt ihr das Problem? Oder lasst ihr einfach alle Dateien im gleichen Ordner?Edit: Oder gibt es eine Lösung, z.B. die DLLs in einen separaten Ordner zu tun, und Linkereinstellungen dann direkt in den Quelltext zu schreiben? Weil normalerweise sucht das Programm nur im gleichen Ordner...
-
Wär immer noch aktuell...
Wie löst ihr das Problem eigentlich? Oder lasst ihr einfach alle Dateien im gleichen Ordner?