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

Hafnernuss

Frischling

  • »Hafnernuss« ist der Autor dieses Themas

Beiträge: 21

Wohnort: Graz Umgebung

Beruf: Schüler

  • Private Nachricht senden

1

21.02.2010, 20:30

[solved]Haufenweise LNK2019er, SDL_mixer

Guten Abend Jungs un Mädels!

Hab ich mich hier nun auch registriert, und hab schon die erste Frage!

Dank diesem überaus tollem Forum hab ich in den letzten 3 Stunden beinahe alles erreicht was ich erreichen wollte, nun aber ist Sense, ich komm einfach nicht mehr weiter.

Ich brauch für mein kleines Spielchen nurmehr funktionierende Sound Ausgabe, und habe mir auch schon eine nützliche Klasse geschrieben. ( Keine Sorge, der Code kommt noch ;) ).

Ich habe mir überlegt diese Klasse mit Singletons zu verwenden, da ich ja überall und immer Sound brauche, also wozu immer instanzieren.

Kompiliert wird andstandslos, allerdings meckert der Linker rum. Nicht aufgelöster Verweiß blablabla:

Zitat

1>------ Erstellen gestartet: Projekt: SDL_Game, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>main.cpp
1>Verknüpfen...
1>Sound.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_Mix_CloseAudio" in Funktion ""public: virtual __thiscall CSound::~CSound(void)" (??1CSound@@UAE@XZ)".
1>Sound.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_Mix_FreeChunk" in Funktion ""public: virtual __thiscall CSound::~CSound(void)" (??1CSound@@UAE@XZ)".
1>Sound.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_Mix_OpenAudio" in Funktion ""public: bool __thiscall CSound::Init(void)" (?Init@CSound@@QAE_NXZ)".
1>Sound.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_Mix_LoadWAV_RW" in Funktion ""public: void __thiscall CSound::Load(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?Load@CSound@@QAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)".
1>Sound.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_Mix_PlayChannelTimed" in Funktion ""public: void __thiscall CSound::Play(void)" (?Play@CSound@@QAEXXZ)".
1>C:\Users\Philipp Hafner\Documents\Visual Studio 2008\Projects\SDL_Game\Debug\SDL_Game.exe : fatal error LNK1120: 5 nicht aufgelöste externe Verweise.
1>Das Buildprotokoll wurde unter "file://c:\Users\Philipp Hafner\Documents\Visual Studio 2008\Projects\SDL_Game\SDL_Game\Debug\BuildLog.htm" gespeichert.
1>SDL_Game - 6 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Includes und Libs ist alles korrekt eingetragen. Hier nun meine Klasse:

Sound.h

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
#ifndef SOUND_HPP
#define SOUND_HPP

#include <SDL_mixer.h>
#include "Singleton.tpp"
#include <iostream>

#define g_pSound CSound::Get()

class CSound : public TSingleton<CSound>
{
public:
    ~CSound();

    bool Init();
    void Load(const std::string sFilename);
    void Play ();

private:
    int audio_rate;
    Uint16 audio_format;
    int audio_channels;
    int audio_buffers;
    Mix_Chunk *sound;
};

#endif


Sound.cpp

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
#include "Sound.hpp"


// Destruktor

CSound::~CSound()
{
    // Struktur freigeben

    Mix_FreeChunk(sound);
    // Audioausgabe schließen

    Mix_CloseAudio();
}

bool CSound::Init()
{
    // Audio Einstellungen setzen

    audio_rate = 22050;
    audio_format = AUDIO_S16SYS;
    audio_channels = 2;
    audio_buffers = 4096;

     // Audioausgabe öffnen

    if(Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers) != 0)
    {
        std::cout << "Soundmodule coult not be initialised." << std::endl;
        std::cout << "\t Errorcode: " << Mix_GetError() << std::endl;

        return 0;
    }

    return 1;
}

// Aufgabe: Sounddatei laden

void CSound::Load(const std::string sFilename)
{
   
    // Sounddatei laden   

    sound = Mix_LoadWAV(sFilename.c_str());
    if(sound == NULL)
    {
        std::cout << "Could not load WAV File." << std::endl;
        std::cout << "\t Errorcode: " << Mix_GetError() << std::endl;
    }
}

// Aufgabe: Sounddatei abspielen

void CSound::Play()
{
    // Sound abspielen

    if(Mix_PlayChannel(-1, sound, 0)==-1)
        {
            std::cout << "Could not play WAV File." << std::endl;
            std::cout << "\t Errorcode: " << Mix_GetError() << std::endl;
        }
}


Der Code ist eine abgeänderte Version von hier.

Wäre toll wenn mir jemand helfen könnte ;9

mfg

Hafnernuss

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

2

21.02.2010, 20:56

Ich hab die Lib noch nie benutzt... aber es scheint, dass du vergessen hast, die SDL_mixer-Library mitzulinken...
Das kannst du in den projekteinstellungen machen ;)

Hafnernuss

Frischling

  • »Hafnernuss« ist der Autor dieses Themas

Beiträge: 21

Wohnort: Graz Umgebung

Beruf: Schüler

  • Private Nachricht senden

3

21.02.2010, 21:07

Nein, die ist gelinkt. Komischerweise krieg ich aber wirklich für jede Mixer Funktion einen Linker error.

4

21.02.2010, 21:17

Sicher das es #include "Singleton.tpp" heißen soll und nicht #include "Singleton.hpp"

Mfg male

5

21.02.2010, 21:18

Von der furchtbaren Verwendung von Singletons mal abgesehen ...
Hast du die richtige lib gelinkt? Auf release und debug Mode geachtet?
Ich habe sdl_mixer leider nie benutzt ....
Der Pfad zur Lib korrekt eingetragen?

Hafnernuss

Frischling

  • »Hafnernuss« ist der Autor dieses Themas

Beiträge: 21

Wohnort: Graz Umgebung

Beruf: Schüler

  • Private Nachricht senden

6

21.02.2010, 21:19

Ja, ist eine Template Klasse, und es funktioniert auch überall sonst. Verwends ja nicht nur hier. Ich werds mal testweise rausnehmen, und poste dann was es gebracht hat.

EDIT: Keine Wirkung, daran liegts nicht. Hier mal meine Includes:

Projects\Includes\SDL_mixer\include
Projects\Includes\SDL\include

Projects\Includes\SDL\lib
Projects\Includes\SDL_mixer\lib


Also Includes stimmen sicher, sonst würde er sich ja aufregen das er die SDL_mixer.h nicht finen könnte.

Hafnernuss

Frischling

  • »Hafnernuss« ist der Autor dieses Themas

Beiträge: 21

Wohnort: Graz Umgebung

Beruf: Schüler

  • Private Nachricht senden

7

21.02.2010, 21:27

Zitat von »"Databyte"«

Ich hab die Lib noch nie benutzt... aber es scheint, dass du vergessen hast, die SDL_mixer-Library mitzulinken...
Das kannst du in den projekteinstellungen machen ;)


Problem Gelöst, ich glaub ich hatte dich falsch verstanden....

Ich benutze VS2008, und habe es zwar unter Projekteinstellungen->Allgemein->Zusätzliche Bibliotheksverzeichnisse eingetragen, nicht aber bei den Abhängigkeiten.

Kann geclosed werden.

Is mir fast peinlich das mir das passiert ist :shock:

Trotzdem danke an euch beiden für die rasche Antwort ;)

Werbeanzeige