在寻找了各种声音API库之后,我决定暂时使用FMOD。

问题是,每当我尝试编译其中一个代码示例时,都会出现以下错误:

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'|

我正在使用的代码示例是这样的:
#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...

我正在使用最新版本的FMOD,并在GNU GCC编译器中使用Code::Blocks IDE(版本10.05)。该项目的类型为“控制台应用程序”。 fmodex.dll文件在我的项目的文件夹中。我正在使用Windows XP 32位SP3。

我已经链接到libfmodex.a库,并尝试过链接到它所在的其他库,但这不能解决问题。

因此,我的问题是,我该怎么做才能阻止这些错误的发生?当我在使用其他库之前遇到类似的“x的 undefined reference ”错误时。我只是忘了在Code::Blocks中链接到它们,一旦我这样做,它们就会起作用。

如果您需要有关代码等的更多信息,请说

最佳答案

当将FMOD与Code::Blocks一起使用时,您需要使用C API,而不是C++ API。 FMOD是使用Visual Studio构建的,因此C++符号使用VC修改方案。在“Windows FMOD入门”文档中有一条注释提到了这一点。

http://en.wikipedia.org/wiki/Name_mangling#How_different_compilers_mangle_the_same_functions

关于c++ - C++:对 'FMOD:: X'的 undefined reference ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5303643/

10-12 16:06