2011-03-14 134 views
2

環顧各種聲音API庫之後,我決定暫時使用FMOD。C++:對'FMOD :: X'的未定義引用

問題是,每當我試圖編譯的代碼示例之一,我得到了以下錯誤:我使用是這個

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,並使用Code :: Blocks IDE(版本10.05)和GNU GCC編譯器。該項目是「控制檯應用程序」類型。 fmodex.dll文件位於我的項目文件夾中。我正在使用Windows XP 32位SP3。

我已經聯繫到libfmodex.a庫,並嘗試連接到它擁有那裏,以及其他圖書館,但這並不解決問題。

我的問題是,因此,我需要做什麼來制止這些錯誤發生的?就像我在使用其他庫之前遇到類似的「Undefined reference to x」錯誤一樣。我剛剛忘記了在Code :: Blocks中鏈接到它們,只要我這樣做,它們就會工作。

難道說,如果你需要有關代碼等

+0

如果可能的話,我仍然需要更多幫助。 – James 2011-03-14 20:29:54

+0

你如何調用鏈接器,例如makefile中的行。 – fizzer 2011-03-14 20:49:55

+0

我不使用makefile(也許我應該,需要幫助,雖然)我使用項目構建選項..鏈接器設置,並通過該添加庫文件夾。 (這是與codeblocks) – James 2011-03-14 20:56:53

回答

1

更多信息我有Windows中準備在驗證這一點,但嘗試更換的反斜線與斜線在包括路徑,或逃生反斜槓。

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

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

(或者,更好,只需添加D:\Games\FMOD Programmers API Win32\api\inc\到您的包含路徑列表,並且包括文件名,而不是完整路徑的文件,那麼你的代碼可能實際編譯比其他地方在特定的電腦!)

+0

我會嘗試這兩點,雖然我可能已經嘗試過。 ..在這裏,我去... – James 2011-03-14 20:13:36

+0

遺憾的是沒有這些東西的工作:(謝謝儘管嘗試。 – James 2011-03-14 20:16:07

+0

哎呀,在你的評論忘了,這樣他們就展現出來,很抱歉。 – James 2011-03-14 20:20:56

0

那些未定義引用錯誤意味着編譯器,或者更確切地說,編譯器的連接件部分,無法找到庫。

我不使用代碼:: Blocks的,所以我不知道在哪裏設置的,但你需要告訴你的項目使用的庫和在哪裏可以找到它。

只把DLL目錄是足夠的運行程序,但它連接你需要的.lib文件。

+0

事實上,這就是我想但作爲我在我的問題中說過我ied在代碼塊中鏈接到它們,但它仍然不能解決所有的錯誤。 (奇怪的是,它會解決這些問題的一個而不是其他4) – James 2011-03-14 20:18:59

+0

@Zan山貓,我在你的意見忘記還有這樣你會看到他們,我們對此深感抱歉,不知道我這樣做是在此評論的方式這樣做。 – James 2011-03-14 20:21:51

+0

@James:回覆答案總是會通知答案作者,所以沒關係。 – 2011-03-14 21:17:31