Frage

Nachdem ich mich nach verschiedenen Sound -API -Bibliotheken umgesehen hatte, habe ich mich vorerst beschlossen, FMOD zu verwenden.

Das Problem ist, dass ich immer dann die folgenden Fehler erhalte, wenn ich versuche, eines der Code -Beispiele zu kompilieren:

obj\Release\main.o:main.cpp|| undefined reference to `FMOD::System::getVersion(unsigned int*)@8'|

obj\Release\main.o:main.cpp|| undefined reference to `FMOD::System::init(int, unsigned int, void*)@16'|

obj\Release\main.o:main.cpp|| undefined reference to `FMOD::System::createSound(char const*, unsigned int, FMOD_CREATESOUNDEXINFO*, FMOD::Sound**)@20'|

obj\Release\main.o:main.cpp|| undefined reference to `FMOD::Sound::setMode(unsigned int)@8'|

Das Codebeispiel, das ich verwende, ist:

#include <D:\Games\FMOD Programmers API Win32\api\inc\fmod.hpp>
#include <D:\Games\FMOD Programmers API Win32\api\inc\fmod_errors.h>
#include <sstream>
#include <windows.h> // for PlaySound()
#include <time.h>
#include <mmsystem.h>    
using namespace std;
int main(int argc, char* argv[])
{
FMOD::System     *system;
FMOD::Sound      *sound1, *sound2, *sound3;
FMOD::Channel    *channel = 0;
FMOD_RESULT       result;
int               key;
unsigned int      version;

/*
    Create a System object and initialize.
*/
result = FMOD::System_Create(&system);


result = system->getVersion(&version);

result = system->init(32, FMOD_INIT_NORMAL, 0);


result = system->createSound("../media/drumloop.wav", FMOD_HARDWARE, 0, &sound1);


result = sound1->setMode(FMOD_LOOP_OFF);    /* drumloop.wav has embedded loop points   which automatically makes looping turn on, */
                                            /* so turn it off here.  We could have also just put FMOD_LOOP_OFF in the above CreateSound call. */

 // Code continues into other bits that work...

Ich verwende die neueste Version von FMOD und verwende den Code :: Blocks IDE (Ver 10.05) mit dem GNU GCC -Compiler. Das Projekt ist vom Typ "Konsolenanwendung". Die fmodex.dll -Datei befindet sich im Ordner meines Projekts. Ich verwende Windows XP 32 -Bit SP3.

Ich habe mit dem verbunden libfmodex.a Bibliothek und habe versucht, mit den anderen Bibliotheken zu verknüpfen, die auch dort vorhanden sind, aber dies löst das Problem nicht.

Meine Frage ist daher, was ich tun muss, um diese Fehler zu stoppen? Wie als ich auf ähnliche "undefinierte Referenz auf X" -Fehler gestoßen bin, bevor ich andere Bibliotheken verwendete. Ich hatte gerade vergessen, mit ihnen in Code :: Blöcken zu verlinken, und sobald ich es tat, würden sie funktionieren.

Sagen Sie, wenn Sie weitere Informationen zum Code usw. benötigen, usw.

War es hilfreich?

Lösung

Wenn Sie FMOD mit Code :: Blocks verwenden, müssen Sie die C API nicht die C ++ - API verwenden. FMOD ist mit Visual Studio gebaut, daher verwenden die C ++ -Symbole das VC -Manglingschema. Es gibt eine Notiz im Dokument "Erste Schritte mit FMOD for Windows", in dem dies erwähnt wird.

http://en.wikipedia.org/wiki/name_mangling#how_different_compilers_mangle_the_Same_functions

Andere Tipps

Ich tue nicht Halten Sie eine Windows -Box bereit, um dies einzuverifizieren, aber versuchen Sie, diese Backslashes durch Vorwärts -Schrägstriche in den Include -Pfaden zu ersetzen oder den Rücklauf zu entkommen.

#include <D:/Games/FMOD Programmers API Win32/api/inc/fmod.hpp>
#include <D:/Games/FMOD Programmers API Win32/api/inc/fmod_errors.h>

oder

#include <D:\\Games\\FMOD Programmers API Win32\\api\\inc\\fmod.hpp>
#include <D:\\Games\\FMOD Programmers API Win32\\api\\inc\\fmod_errors.h>

(Oder, besser, einfach hinzufügen D:\Games\FMOD Programmers API Win32\api\inc\ zu Ihrer Liste der Einschlusspfade und die Dateien nach Dateiname anstelle des vollständigen Pfades einschließen. Dann kann Ihr Code tatsächlich an einem anderen Ort als Ihrem spezifischen Computer kompilieren!)

Diese undefinierten Referenzfehler bedeuten, dass der Compiler oder vielmehr der Linker Teil des Compilers die Bibliothek nicht finden kann.

Ich verwende keinen Code :: Blöcke, daher weiß ich nicht, wo sich die Einstellung befindet, aber Sie müssen Ihr Projekt sagen, dass Sie die Bibliothek verwenden sollen und wo Sie sie finden können.

Wenn Sie nur die DLL in das Verzeichnis einfügen, reicht es aus, um das Programm auszuführen. Sie benötigen jedoch eine .lib -Datei.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top