Seite 1 von 1

Problem mit der SDL

Verfasst: Sa Jan 23, 2010 11:37 pm
von sukka
Hi Leute,

kleines Problem, bin in VS2008 unterwegs und würde gern n kleines Feld initialisieren, was mir viele lustige Vierecke malt (als Grafiken eingebunden)
Soweit das Konzept, jetzt meckert allerdings der Linker wieder rum mit der Standardmeldung: LNK2019... ich komm nicht weiter :(

Code: Alles auswählen

#include "SDL.h"
#include <iostream>
#include <string>
using namespace std;

const int SCREEN_WIDTH = 1280;
const int SCREEN_HEIGHT = 800;
const int SCREEN_BPP = 32;

SDL_Surface* screen = NULL;
SDL_Surface* background = NULL;
SDL_Surface* message = NULL;

SDL_Surface* load_image(string filename)
{
	SDL_Surface* loadedImage = NULL;
	SDL_Surface* optimizedImage = NULL;
	loadedImage = SDL_LoadBMP(filename.c_str());
	if(loadedImage != NULL)
	{
		optimizedImage = SDL_DisplayFormat(loadedImage);
		SDL_FreeSurface(loadedImage);
	}
	return optimizedImage;

};

void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination)
{
	SDL_Rect offset;
	offset.x = x;
	offset.y = y;
	SDL_BlitSurface(source, NULL, destination, &offset);
};



int main(int argc, char* args[])
{
	if(SDL_Init(SDL_INIT_EVERYTHING) == -1)
		return 1;

	screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP,SDL_SWSURFACE);
	if (screen == NULL)
		return 1;
	SDL_WM_SetCaption("Sukkas World",NULL); // die NULL beschreibt das Icon, könnte also auch ein Favicon sein
	message = load_image("images/hallo.bmp");
	background = load_image("images/background.bmp");
	apply_surface(0, 0, background, screen);
	apply_surface(640, 0, background, screen);
	apply_surface(0, 400, background, screen);
	apply_surface(640, 400, background, screen);
	

	apply_surface(531, 328, message, screen);

	if(SDL_Flip(screen) == -1)
		return 1;

	SDL_Delay(5000);
	SDL_FreeSurface(background);
	SDL_FreeSurface(message);

	SDL_Quit();

	return 0;

};

viele Grüße,

Sukka

Re: Problem mit der SDL

Verfasst: Sa Jan 23, 2010 11:39 pm
von Xin
Könntest LNK2019 mal komplett ausschreiben?

Re: Problem mit der SDL

Verfasst: So Jan 24, 2010 12:04 am
von sukka
Na dann könnte man ja verstehen, was das Problem ist :)

Hier ist die genaue Fehlermeldung vom VS:

Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_SDL_FreeSurface" in Funktion ""struct SDL_Surface * __cdecl load_image(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?load_image@@YAPAUSDL_Surface@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)". main.obj surface


Also irgendwas scheint er nicht in der SDL.h zu finden, die allerdings korrekt eingebunden ist und auch im selben Ordner wie die Solution liegt.

Re: Problem mit der SDL

Verfasst: So Jan 24, 2010 12:20 am
von Kerli
Mit der SDL.h stimmt schon alles. Dein Problem liegt irgendwo beim Linken. Hast du auch sdl.lib und sdlmain.lib eingetragen bzw. ist das der einzige Fehler?

Re: Problem mit der SDL

Verfasst: So Jan 24, 2010 12:45 am
von sukka
Insgesamt 13 Fehler, die allerdings alle auf den Linker verweisen,

die ersten 5 sind noch ähnlich, die anderen lauten:


Fehler 6 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_SDL_Quit" in Funktion "_SDL_main". main.obj surface


Und ähnlich, eben wie jene Funktionen, die die SDL benötigen, aber sie nicht finden.

Die anderen Dateien sollten soweit auch in Ordnung sein zumal ein Projekt in der gleichen Projektmappe keinerlei Probleme damit hat kompilliert und gelinkt zu werden.

viele Grüße,

Sukka

Re: Problem mit der SDL

Verfasst: So Jan 24, 2010 12:54 am
von sukka
hmm.... Antwortbutton kaputt... also nochmal

Fehler gefunden:

Projekteigenschaften --> Linker --> Eingabe --> Zusätzliche Abhängigkeiten --> SDL.lib SDLmain.lib nicht vergessen einzutragen... bei jedem SDL Projekt... ich hau mir selber annen Kopp, vielen Dank für den Denkanstoß

viele Grüße,

Sukka

Re: Problem mit der SDL

Verfasst: Mo Jan 25, 2010 12:57 am
von sukka
Soho.... jetzt wirds nochmal interessant,

im Debug läuft die Kiste. Schalte ich jetzt aber vom Debug in den Release kommen wieder Link-Fehler.

Code: Alles auswählen

void apply_surface(int width, int height, SDL_Surface* source, SDL_Surface* destination)
{
	SDL_Rect offset;
	offset.x = width;
	offset.y = height;
	SDL_BlitSurface(source, NULL, destination, &offset);
};

Screen = SDL_SetVideoMode(Window_Width, Window_Height, Color_Depth, SDL_SWSURFACE);

	background = load_image("images/background.bmp");
	for(int i = 0; i < Window_Width; i+=20)
	{
		for(int j = 0; j < Window_Height; j+=20)
			apply_surface(i, j, background, Screen);
	}



Zum Anderen hab ich noch ein kleineres Problem, und zwar wenn ich den Code im Schritt für Schritt (Prozedurschritt) durchlaufen lasse kommt eine Fehlermeldung: "Für die aktuelle Position ist kein Quellcode verfügbar" und er springt in die crtexe.c Das Programm läuft allerdings beim Klick auf <OK> weiter und zeigt mir auch das Feld an, welches ich in der Schleife, die oben im Code steht (erster Post), so wie es sein soll.
Lasse ich das Ganze jetzt Starten ohne zu debuggen, dann taucht zwar auch der "Screen" auf, nur bleibt dieser schwarz.

Folgende Fehler tauchen beim Release, aber nicht beim Debugmodus auf:

Fehler 1 error LNK2001: Nicht aufgelöstes externes Symbol "_SDL_Init". main.obj Testing


jetzt weiß ich schonwieder nicht weiter.

viele Grüße,

Sukka

Re: Problem mit der SDL

Verfasst: Mo Jan 25, 2010 10:19 am
von Kerli
sukka hat geschrieben:im Debug läuft die Kiste. Schalte ich jetzt aber vom Debug in den Release kommen wieder Link-Fehler.
Du musst die Bibliotheken für den Release Modus glaub ich noch einmal getrennt angeben.
sukka hat geschrieben:"Für die aktuelle Position ist kein Quellcode verfügbar"
Wahrscheinlich hat er einfach den Quellcode der SDL nicht. Frag mich jetzt aber bitte nicht wie das genau mit VS geht :P

Re: Problem mit der SDL

Verfasst: Mo Jan 25, 2010 3:39 pm
von cloidnerux
Du musst die Bibliotheken für den Release Modus glaub ich noch einmal getrennt angeben.
Ja, muss man, einfach im EIgenschaftenfenster des Projekts oben von Debug auf Release umschalten und eintragen.
Zum Anderen hab ich noch ein kleineres Problem, und zwar wenn ich den Code im Schritt für Schritt (Prozedurschritt) durchlaufen lasse kommt eine Fehlermeldung: "Für die aktuelle Position ist kein Quellcode verfügbar" und er springt in die crtexe.c Das Programm läuft allerdings beim Klick auf <OK> weiter und zeigt mir auch das Feld an, welches ich in der Schleife, die oben im Code steht (erster Post), so wie es sein soll.
Du rufst eine Funktion auf, die Vorcompiliert als Objekt vorliegt oder aus einer dll geladen wird, daher kann VS diesen Code auch nicht anzeigen.