Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

PuraVida

Frischling

  • »PuraVida« ist der Autor dieses Themas

Beiträge: 34

Wohnort: Ludwigsburg

Beruf: Übersetzer

  • Private Nachricht senden

1

06.06.2012, 00:40

SFML 1.6 / Probleme beim Debuggen

Hallo liebes Forum,

ich bin soweit Eurem rat gefolgt und habe mir die SFML files runtergeladen und mit dem Tutorial angefangen.

Das schwerste ist für mich ehrlich gesagt momentan nicht der Code, sondern die Einstellung von Visual Basic 2008 Express...

Wie im Tutorial beschrieben, habe ich die entsprechenden Einstellungen gemacht und das erste Beispiel übernommen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <SFML/System.hpp>
#include <iostream>

int main()
{
    sf::Clock Clock;
    while (Clock.GetElapsedTime() < 5.f)
    {
        std::cout << Clock.GetElapsedTime() << std::endl;
        sf::Sleep(0.5f);
    }

    return 0;
}



Das hat soweit alles geklappt.

Dann wollte ich das nächste Beispiel starten und ein erstes Fenster erzeugen, mit diesem Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
#include <SFML/Window.hpp>


int main()
{
    // Create the main window
    sf::Window App(sf::VideoMode(800, 600, 32), "SFML Window");

    return EXIT_SUCCESS;
}


Jetzt klappt das Debuggen allerdings nicht mehr. Ich habe schon versucht, ob jmd im Forum mal das Gleiche Problem hatte - leider ohne Ergebnis. Und aus allen anderen Infos werd ich nicht schlau. Kann mir jmd sagen, woran es liegt, dass das nicht klappt? Ich muss bestimmt etwas an den Prjekteinstellungen ändern, oder?

Diese Fehlermeldungen kommen:

Zitat

1>LINK : warning LNK4098: Standardbibliothek "MSVCRT" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.

1>sfml-window-s.lib(Window.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall sf::Clock::Reset(void)" (?Reset@Clock@sf@@QAEXXZ)" in Funktion ""public: void __thiscall sf::Window::Display(void)" (?Display@Window@sf@@QAEXXZ)".

1>sfml-window-s.lib(Window.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl sf::Sleep(float)" (?Sleep@sf@@YAXM@Z)" in Funktion ""public: void __thiscall sf::Window::Display(void)" (?Display@Window@sf@@QAEXXZ)".

1>sfml-window-s.lib(Window.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: float __thiscall sf::Clock::GetElapsedTime(void)const " (?GetElapsedTime@Clock@sf@@QBEMXZ)" in Funktion ""public: void __thiscall sf::Window::Display(void)" (?Display@Window@sf@@QAEXXZ)".

1>sfml-window-s.lib(Window.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall sf::Clock::Clock(void)" (??0Clock@sf@@QAE@XZ)" in Funktion ""public: __thiscall sf::Window::Window(void)" (??0Window@sf@@QAE@XZ)".
Ich wäre wirklich sehr dankbar, wenn mir jmd sagen könnte, woran es liegt. Mache jetzt hier schon seit Stunden rum und komme einfach nicht drauf. Was die fehlermeldungen bedeuteten habe ich glaube ich verstanden. Es bedeutet wohl, dass die Klasse nicht zur Verfügung steht. Ich verstehe allerdings nicht warum, weil ich sie doch über den header einbinde, oder?

Gruß Tobias

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »PuraVida« (06.06.2012, 00:58)


2

06.06.2012, 10:21

Ich vermute mal, dass du vergessen hast, die benötigten dll´s für die sfml zu linken.
Die müssten unter Linker->Eingabe (in den Projekteinstellungen) zu Finden sein, sonst weiß er nicht, wo er nach den Funktionen suchen soll, auch wenn du sie included hast ;)

Edit: Sieh die mal die Getting started an, ob du da etwas vergessen hast

PuraVida

Frischling

  • »PuraVida« ist der Autor dieses Themas

Beiträge: 34

Wohnort: Ludwigsburg

Beruf: Übersetzer

  • Private Nachricht senden

3

06.06.2012, 11:49

Hallo Ombalat,

vielen Dank für Deinen Tipp.

Das Tutorial, das Du da verlinkt hast habe ich durchgemacht udn gedacht, ich hätte soweit alles richtig eingebunden.

In der Projekteinstellung Linker -> Eingabe steht bei mir unter zusätzliche Abhängigkeiten diese Datei: "sfml-system-s.lib" - so wies im Tutorial steht.

Bei dem zweiten Beispiel funktioniert das dann aber nicht...

Viele Grüße,

Tobias

PuraVida

Frischling

  • »PuraVida« ist der Autor dieses Themas

Beiträge: 34

Wohnort: Ludwigsburg

Beruf: Übersetzer

  • Private Nachricht senden

4

06.06.2012, 13:03

Hallo,

bins nochmal. Also wenn ich das richtig verstehe meinst Du doch mit DLL diese Datei: "sfml-system-s.lib"

oder?

Viele Grüße,

Tobias

PuraVida

Frischling

  • »PuraVida« ist der Autor dieses Themas

Beiträge: 34

Wohnort: Ludwigsburg

Beruf: Übersetzer

  • Private Nachricht senden

5

06.06.2012, 14:02

Hallo nochmal,

weiß denn wirklich niemand woran das liegt. Ich bin hier echt am verzeweifeln und inzwischen auch total verwirrt.

Weitere Fragen:

Worin besteht der Unterschied zwischen den im Tutorial erwähnten dynamischen und statischen Einbinden? Was ist besser? Und was muss man konkret tun?

Habe das Tutorial jetzt 10 mal von oben nach unten gewälzt und komme einfach nicht weiter. Sorry.

Hier nochmal genau, was ich jetzt gemacht habe:

Das ist der Quellcode aus der main.cpp (wie im Tutorial):

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include <SFML/Window.hpp>


////////////////////////////////////////////////////////////
/// Entry point of application
///
/// \return Application exit code
///
////////////////////////////////////////////////////////////
int main()
{
    // Create the main window
    sf::Window App(sf::VideoMode(800, 600, 32), "SFML Window");

    // Start main loop
    bool Running = true;
    while (Running)
    {
        App.Display();
    }

    return EXIT_SUCCESS;
}


Ich habe jetzt alle Einstellungen entfernt und nur den ersten Schritt wie im "Getting Started" Tutorial hier für die dynamische Einbindung (Copy the SFML development files to your Visual Studio installation directory) gemacht. Ich habe also die beiden Verzeichnisse lib und include in die Installationsordner von Visual studio reinkopiert und sonst nichts.
Und jetzt habe ich eben anstatt des Beispielcodes in "Getting Started" den Beispielcode aus einem der nächsten Tutorial drin (siehe oben).
Dort sehe ich, dass ein anderer header (nämlich SFML/Window.hpp anstatt SFML/System.hpp) eingebunden wird.
Was muss ich jetzt also genau tun, damit ich den obigen Code ausführen kann? Wie gesagt, ich habe jetzt nur die Verzeichnisse reinkopiert und sonst nichts gemacht (weil iwie alles net geklappt hat).
Die Fehlermeldung kommt, wenn ich den obigen Code versuche "abspielen" zu lassen:

Quellcode

1
2
3
4
5
6
7
8
1>------ Erstellen gestartet: Projekt: SFML-Fenster-3, Konfiguration: Debug Win32 ------
1>  main.cpp
1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual __thiscall sf::Window::~Window(void)" (??1Window@sf@@UAE@XZ)" in Funktion "_main".
1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall sf::Window::Display(void)" (?Display@Window@sf@@QAEXXZ)" in Funktion "_main".
1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall sf::Window::Window(class sf::VideoMode,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,unsigned long,struct sf::WindowSettings const &)" (??0Window@sf@@QAE@VVideoMode@1@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@KABUWindowSettings@1@@Z)"in Funktion "_main".
1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall sf::VideoMode::VideoMode(unsigned int,unsigned int,unsigned int)" (??0VideoMode@sf@@QAE@III@Z)" in Funktion "_main".
1>...\visual studio 2010\Projects\SFML-Fenster-3\Debug\SFML-Fenster-3.exe : fatal error LNK1120: 4 nicht aufgelöste externe Verweise.
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

Viele Grüße,
Tobias

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »PuraVida« (06.06.2012, 14:19)


6

06.06.2012, 14:38

Ist bei mir schon länger her, dassich das gemacht habe ..
Ich weiß noch, dass es mehrere Sachen gab, die man im Linker hinzufügen konnte, je nachdem, welche Systeme von der SFML du benutzt.

Ich hatte damals (für den Debug Modus) folgende zusätzliche Einstellungen:
- sfml-graphics-d.lib
- sfml-system-d.lib
- sfml-window-d.lib
(Bei mir hatten die für den Debug modus das -d Präfix)
(Das Präfix -s war, soviel ich weiß, für die statische Linkung)

Ich vermute mal, dass du entweder die window - lib oder die graphics - lib brauchst ... is aber wie gesagt schon länger her ;)

Beachten musst du auch, dass du für die DEBUG - Einstellungen auch die Debug libs nimmst und für die RELAISE einstellungen eben die anderen ;)
Im Zweifelsfall schau einfach malin dem Ordner nach, wo du die SFML liegen hast und schau nach, wie die libs bei dir heissen ;)

PS.: Benutz bitte die Editier funktion, statt 3 mal neu zu posten :)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Ombalat« (06.06.2012, 14:48)


PuraVida

Frischling

  • »PuraVida« ist der Autor dieses Themas

Beiträge: 34

Wohnort: Ludwigsburg

Beruf: Übersetzer

  • Private Nachricht senden

7

06.06.2012, 14:50

Hi Ombalat,

stimmt, sorry, mehrfach posten gewöhne ich mir hiermit sofort ab ;-)

Also, ich habe gerade ein kleines Wunder erlebt, warum auch immer (hatte vorhin sicher schonmal die gleichen Einstellungen gewählt).

Ich habe jetzt folgende Einstellungen gemacht:

Ich habe unter Projekteinstellungen - Konfigurationseinstellungen - C++ Verzeichnisse unter "Bibliotheksverzeichnisse" und "IncludeVerzeichnisse" jeweils das Verzeichnis verlinkt, in dem die SFML Dateien auf der Festplatte liegen.

Dann habe ich zusätzlich für dieses Projekt unter Projetkteinstellungen - Konfigurationseinstellungen - Linker - Eingabe unter "zusätzliche Abhängigkeiten" die für dieses Projekt benötigte Headerdatei, nämlich sfml-window.lib, eingebunden.

Jetzt habe ich wieder versucht es abzuspielen und es poppt eine Warnmeldung auf:

"Das Programm kann nicht gestartet werden, da sfml-window.dll auf dem Computer fehlt. Installieren Sie das Programm erneut, um das problem zu beheben."

Die Ausgabe zeigt folgendes:

Zitat

"SFML-Fenster-3.exe": "C:\Users\BÜ-WORK-01\Documents\Visual Studio 2010\Projects\SFML-Fenster-3\Debug\SFML-Fenster-3.exe" geladen, Symbole wurden geladen.
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\ntdll.dll" geladen, Symbole geladen (ohne Quellinformationen).
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\kernel32.dll" geladen, Symbole geladen (ohne Quellinformationen).
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\KernelBase.dll" geladen, Symbole geladen (ohne Quellinformationen).
"SFML-Fenster-3.exe": "C:\Users\BÜ-WORK-01\Documents\Visual Studio 2010\Projects\SFML-Fenster-3\Debug\sfml-window.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\opengl32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\msvcrt.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\advapi32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\sechost.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\rpcrt4.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\sspicli.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\cryptbase.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\gdi32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\user32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\lpk.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\usp10.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\glu32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\ddraw.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\dciman32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\setupapi.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\cfgmgr32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\oleaut32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\ole32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\devobj.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\dwmapi.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\winmm.dll" geladen, Cannot find or open the PDB file
Das Programm "[4912] SFML-Fenster-3.exe: Systemeigen" wurde mit Code -1073741515 (0xc0000135) beendet.

Kann mir jmd sagen, was ich tun soll? Hatte jmd schonmal das Problem? Die Datei sfml-window.dll ist definitiv auf der Festplatte, und zwar in dem lib-Ordner von SFML 1.6. Kann mir jmd sagen, worin der Unterschied zwischen der sfml-window.lib Datei und der sfml-window.dll-Datei liegt? Die .lib Datei habe ich ja als "zusätzliche Abhängigkeit" angegeben, was soweit zu passen scheint.

EDIT:
Kann mir jemand sagen, was mit dieser Zeile des Tutorials gemeint ist? Ist das für mich relevant?

Zitat

Your program should now compile, link and run fine. If you linked against the dynamic versions of the SFML libraries,
donc forget to copy the corresponding DLLs (sfml-system.dll in this case) to your executable's directory, or
to a directory contained in the PATH environment variable.


Important: if you link against the dynamic libraries, you have to define the SFML_DYNAMIC
macro in your project's settings. If you don't, you'll get linker errors when compiling your application.


Viele Grüße,

Tobias

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »PuraVida« (06.06.2012, 15:22)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

06.06.2012, 16:13

Windows findet die dll aber nicht einfach so, wenn sie nur irgendwo auf der Festplatte liegt. Die muss im selben Ordner liegen wie die exe, also kopier sie einfach dort hin. ;)

Was das SFML_DYNAMIC angeht: Um Funktionen, Klassen etc. aus einer dll zu benutzen, müssen diese entsprechend deklariert werden. Das #define SFML_DYNAMIC schaltet die Deklarationen in den SFML Headern um. Das sollte dich eigentlich betreffen, da du aber keine Linkerfehler bekommst, hast du das offenbar schon richtig gemacht...

PuraVida

Frischling

  • »PuraVida« ist der Autor dieses Themas

Beiträge: 34

Wohnort: Ludwigsburg

Beruf: Übersetzer

  • Private Nachricht senden

9

06.06.2012, 16:32

@ dot:

die datei habe ich bereits in den Ordner kopiert. In diesem Debug Ordner liegen jetzt insgesamt 4 Dateien:

Projektname.exe / Projektname.ilk / Projektname.pdb / sfml-window.dll

Ich habe eben gedacht, dass mich dieser Teil der Anleitung nicht betrifft, weil ich ja jetzt den anderen Weg gegangen bin und unter "Projekteinstellungen" - "Konfigurationseinstellungen" - "C++-Verzeichnisse" die beiden lib/include Verzeichnisse angegeben habe und danach die zusaätzliche Abhängigkeit zu der sfml-window.lib angegeben habe.

Naja, letztlich habe ich jetzt auch das SFML_DYNAMIC angegeben und die Datei liegt auch im Verzeichnis - es kommt immer noch die gleiche Fehlermeldung wie beim letzten Mal:

Zitat

"SFML-Fenster-3.exe": "C:\Users\BÜ-WORK-01\Documents\Visual Studio 2010\Projects\SFML-Fenster-3\Debug\SFML-Fenster-3.exe" geladen, Symbole wurden geladen.
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\ntdll.dll" geladen, Symbole geladen (ohne Quellinformationen).
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\kernel32.dll" geladen, Symbole geladen (ohne Quellinformationen).
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\KernelBase.dll" geladen, Symbole geladen (ohne Quellinformationen).
"SFML-Fenster-3.exe": "C:\Users\BÜ-WORK-01\Documents\Visual Studio 2010\Projects\SFML-Fenster-3\Debug\sfml-window.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\opengl32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\msvcrt.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\advapi32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\sechost.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\rpcrt4.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\sspicli.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\cryptbase.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\gdi32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\user32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\lpk.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\usp10.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\glu32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\ddraw.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\dciman32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\setupapi.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\cfgmgr32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\oleaut32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\ole32.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\devobj.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\dwmapi.dll" geladen, Cannot find or open the PDB file
"SFML-Fenster-3.exe": "C:\Windows\SysWOW64\winmm.dll" geladen, Cannot find or open the PDB file
Das Programm "[4352] SFML-Fenster-3.exe: Systemeigen" wurde mit Code -1073741515 (0xc0000135) beendet.
Was mach ich nur falsch???

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

06.06.2012, 16:33

Sollte es im Debug Build nicht eigentlich eine sfm-window-d.dll sein oder so?

Werbeanzeige