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

Käsekönig

1x Contest-Sieger

  • »Käsekönig« ist der Autor dieses Themas
  • Private Nachricht senden

1

13.04.2012, 00:37

SFML String Probleme

Ich melde mich nach langer Auszeit mal wieder zurück und widme mich gerade einem kleinen Spiel, zumindest fang ich es an. ;)
Nun brauch ich für dieses Spiel Text, und da gibts leider Probleme.
Wenn ich diesen Tutorial-Code so compiliere und mit folgenden libs linke:
sfml-graphics-s.lib
sfml-main.lib
sfml-system-s.lib
sfml-window-s.lib
dann kommt folgende Warnung: warning LNK4098: Standardbibliothek "LIBCMT" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.

Hier der Code:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include <SFML/Graphics.hpp>


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

    // Create a graphical string
    sf::String Hello;
    Hello.SetText("Hello !\nHow are you ?");
    Hello.SetColor(sf::Color(0, 128, 128));
    Hello.SetPosition(100.f, 100.f);
    Hello.SetRotation(15.f);
    Hello.SetSize(50.f);

    // You can also use the constructor
    sf::String Bonjour("Salut !\nComment ça va ?", sf::Font::GetDefaultFont(), 30.f);
    Bonjour.SetColor(sf::Color(200, 128, 0));
    Bonjour.SetPosition(200.f, 300.f);

    // Start game loop
    while (App.IsOpened())
    {
        // Process events
        sf::Event Event;
        while (App.GetEvent(Event))
        {
            // Close window : exit
            if (Event.Type == sf::Event::Closed)
                App.Close();
        }

        // Make the second string rotate
        Bonjour.Rotate(App.GetFrameTime() * 100.f);

        // Clear screen
        App.Clear();

        // Draw our strings
        App.Draw(Hello);
        App.Draw(Bonjour);

        // Finally, display rendered frame on screen
        App.Display();
    }

    return EXIT_SUCCESS;
}


Ist ja nur eine Warnung, und ansich nicht tragisch, es funktioniert ja alles. Wenn ich aber in meinem "Spiel" einen String verwenden will, kommt ebenso diese Warnung. Ich kann das Spiel zwar ganz normal starten und ausführen, dann beende ich es, und wenn es eigentlich schon beendet ist, erscheint das Fenster ".exe funktioniert nicht mehr...".
Also dachte ich, es liegt an dieser Warnung, bzw. überhaupt an den Strings, da es ohne diesem ja problemlos funktioniert. Ich weiß, die Informationen sind sehr rar, ich weiß nicht wirklich, was man noch braucht, um mir da helfen zu können. ;)

Noch was, ich verwende die SFML mit Visual C++ 2010 und hab mir die libs aus der 2008er Version laut Tutorial selbst kompiliert. Allerdings bekomm ich nur die statischen libs und kann somit nur statisch linken. Möglicherweise liegt es auch daran? Ich bin ratlos. ?(

EDIT: Das "exe funktioniert nicht mehr..." erscheint komischerweise nicht jedes mal. Vorallem wenn ich das ganze länger laufen lasse und ein bisschen herumdrücke und so, dann lässt es sich ganz normal beenden. Aber wie gesagt, die Probleme treten nur auf, wenn ich Text verwenden will. Hat vielleicht jemand eine Idee, woher so ein "exe funktioniert nicht mehr..." stammt, wenn sie ja eh schon beendet wurde?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Käsekönig« (13.04.2012, 01:03)


Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

2

13.04.2012, 11:56

SFML Version und Grafikkarte zu wissen wäre hilfreich (wenn es SFML 2 ist, ist es der berüchtigte Default Font Crash). EDIT: Und der Callstack beim Crash wär auch super.

valentin

Treue Seele

Beiträge: 212

Wohnort: Schweiz

Beruf: Schüler

  • Private Nachricht senden

3

13.04.2012, 13:15

[...]wenn es SFML 2 ist, ist es der berüchtigte Default Font Crash). [...]

Wenns die Sfml 2 ist, dann ist es ganz sicher nicht die aktuellste Version. (Seit neuestem beginnen alle Funktionen mit nem kleinen Buchstaben.)

Aufjedenfall würde ich mit dem gegebenen Wissen auch auf den oben genannten Default-Font-Crash tippen. Mit dem hatte ich auch schon zu kämpfen...
visit me on deviantArt!
http://v-alentin.deviantart.com/

There is no programming language, no matter how structured, that will prevent programmers from making bad programs. //Larry Flon

Käsekönig

1x Contest-Sieger

  • »Käsekönig« ist der Autor dieses Themas
  • Private Nachricht senden

4

13.04.2012, 16:11

Ich verwende SFML-1.6, die Grafikkarte ist eine GEFORCE GT 425M.
Was ist der Callstack und woher bekomm ich den?

Was vielleicht noch von Bedeutung ist, das Programm funktioniert wie gesagt einwandfrei und crashed wirklich nach dem Schließen. Also das Fenster schließt sich, und vielleicht eine Sekunde später kommt dann diese Meldung von Windows. Das passiert sowohl mit der Debug-exe als auch mit der Release-exe, allerdings nicht, wenn ich das Programm aus dem Visual C++ 2010 heraus ausführe, also wenn ich es debugge, dann läuft es ganz normal ab.

Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

5

13.04.2012, 18:21

Wenn es beim debuggen ohne Crash läuft, kannst du leider auch keinen Callstack (Aufrufstapel) für den Crash bekommen.
SFML 1.6 und GeForce deuten auch darauf hin, dass der Default-Font-Crash nicht dein Problem ist.
Möglicherweise stimmen aber deine Einstellungen beim Kompilieren nicht:
  • Bei den Projekteinstellungen unter C/C++ -> Präprozessor -> Präprozessor Definitionen SFML_STATIC eintragen
  • Im Debug-Modus die Bibliotheken mit -d im Dateinamen linken (z.B. sfml-system-s-d.lib)
Wenn das nichts hilft könntest du probeweise trotzdem versuchen eine andere Font zu laden, z.B.

C-/C++-Quelltext

1
2
3
4
5
6
7
sf::Font fnt;
fnt.LoadFromFile("C:/Windows/Fonts/arial.ttf"); // Pfad ggf. anpassen
//...
Hello.SetFont(fnt);
// ...
sf::String Bonjour("Salut !\nComment ça va ?", fnt, 30.f);
//...

Käsekönig

1x Contest-Sieger

  • »Käsekönig« ist der Autor dieses Themas
  • Private Nachricht senden

6

13.04.2012, 22:10

SFML_STATIC hatte ich nicht eingetragen, hab ich nachgeholt, macht aber leider keinen Unterschied. :(
Vielleicht hab ich das nicht ganz richtig rüber gebracht - dieses Beispielprogramm, das ich weiter oben gepostet hab, funktioniert ohne Absturz, da kommt lediglich diese Warnung, die ich bei meinem Programm auch bekomm, wenn ich Text verwende, und meines stürzt dann ab. Vielleicht hilft es, wenn ich das ganze Projekt mal hochlade? Kann es denn an einem Programmierfehler von mir liegen, wenn es nur abstürzt, wenn ich Text verwenden will, und dass es abstürzt, nachdem mein geschriebener Code eigentlich schon aller durch ist?

7

14.04.2012, 00:29

Guck mal hier:

http://msdn.microsoft.com/de-de/library/…=vs.100%29.aspx

Zitat von »MSDN«

Linkertoolwarnung LNK4098... Diese Warnung wird bei dem Versuch ausgegeben, unterschiedliche Typen oder Debug- und Nicht-Debugversionen der Laufzeitbibliothek im selben Programm zu verwenden.

Möglicherweise hast du also deine selbstgebauten SFML Libs mit einer anderen Compileroption für die C-Laufzeitbibliothek kompiliert als dein Projekt. Schau doch mal nach, welche Option für dein Projekt eingestellt ist.

Käsekönig

1x Contest-Sieger

  • »Käsekönig« ist der Autor dieses Themas
  • Private Nachricht senden

8

14.04.2012, 11:58

Ich hab bei den selbstgebauten SFML-libs nichts an den Einstellungen geändert. Lediglich das Projekt mit dem 2010er geöffnet und kompiliert.

Ich hab mal hier die Problemdetails vom Absturz rein kopier, vielleicht hilf das was:
Problemsignatur:
Problemereignisname: APPCRASH
Anwendungsname: Spiel_Version_1.0.exe
Anwendungsversion: 0.0.0.0
Anwendungszeitstempel: 4f8945f0
Fehlermodulname: StackHash_03d5
Fehlermodulversion: 6.1.7600.16559
Fehlermodulzeitstempel: 4ba9b21e
Ausnahmecode: c0000374
Ausnahmeoffset: 000c2913
Betriebsystemversion: 6.1.7600.2.0.0.768.3
Gebietsschema-ID: 3079
Zusatzinformation 1: 03d5
Zusatzinformation 2: 03d5e5836fdf315b9d59f144288e8901
Zusatzinformation 3: 787b
Zusatzinformation 4: 787b58ed08b6621053fd1e5199553239

Wenn ich das hier zu meinen libs rein schreib, kommt immer noch der Konflikt mit LIBCMT.
/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib

Hat vielleicht jemand eine funktionierende Version von SFML für das 2010er und könnte er mir die schicken, damit ich es mal damit versuchen würde?

9

14.04.2012, 14:23

Zitat

Wenn ich das hier zu meinen libs rein schreib, kommt immer noch der Konflikt mit LIBCMT.
/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib

Diese Optionen würden bedeuten, dass du die Singlethreaded C-Laufzeitbibliothek für dein Projekt verwendest. Das kann allerdings nicht sein, weil die Singlethreaded CRT in VS 2010 nicht mehr verfügbar ist.

Vielleicht hast du die Libs mit der Release-Version und dein Projekt mit der Debug-Version der CRT kompiliert?

Käsekönig

1x Contest-Sieger

  • »Käsekönig« ist der Autor dieses Themas
  • Private Nachricht senden

10

14.04.2012, 23:11

Sorry, ich hab ehrlich gesagt, keine Ahnung, was ich verwende. :(

Welche Release-Version, von was, wie?
Lässt sich denn in keiner Weise herausfinden, was den Absturz bewirkt? Oder ob es nicht doch an meinem Code liegt?

Werbeanzeige