Problem mit der SDL

Simple Directmedia Layer: Portable Spieleprogrammierung
Antworten
sukka
Beiträge: 42
Registriert: Do Jul 17, 2008 7:49 pm

Problem mit der SDL

Beitrag von sukka » Sa Jan 23, 2010 11:37 pm

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Problem mit der SDL

Beitrag von Xin » Sa Jan 23, 2010 11:39 pm

Könntest LNK2019 mal komplett ausschreiben?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

sukka
Beiträge: 42
Registriert: Do Jul 17, 2008 7:49 pm

Re: Problem mit der SDL

Beitrag von sukka » So Jan 24, 2010 12:04 am

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.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Problem mit der SDL

Beitrag von Kerli » So Jan 24, 2010 12:20 am

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?
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

sukka
Beiträge: 42
Registriert: Do Jul 17, 2008 7:49 pm

Re: Problem mit der SDL

Beitrag von sukka » So Jan 24, 2010 12:45 am

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

sukka
Beiträge: 42
Registriert: Do Jul 17, 2008 7:49 pm

Re: Problem mit der SDL

Beitrag von sukka » So Jan 24, 2010 12:54 am

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

sukka
Beiträge: 42
Registriert: Do Jul 17, 2008 7:49 pm

Re: Problem mit der SDL

Beitrag von sukka » Mo Jan 25, 2010 12:57 am

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

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Problem mit der SDL

Beitrag von Kerli » Mo Jan 25, 2010 10:19 am

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
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Problem mit der SDL

Beitrag von cloidnerux » Mo Jan 25, 2010 3:39 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten