いろいろなサウンド API ライブラリを調べた結果、とりあえず FMOD を使用することにしました。
問題は、コード例の 1 つをコンパイルしようとするたびに、次のエラーが発生することです。
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 (ver 10.05) と GNU GCC コンパイラを使用しています。プロジェクトのタイプは「コンソール アプリケーション」です。fmodex.dll ファイルは、私のプロジェクトのフォルダーにあります。Windows XP 32 ビット SP3 を使用しています。
ライブラリにリンクlibfmodex.a
し、そこにある他のライブラリにもリンクしようとしましたが、問題は解決しません。
したがって、私の質問は、これらのエラーの発生を止めるために何をする必要があるかということです。他のライブラリを使用する前に、同様の「x への未定義参照」エラーが発生したときと同様です。Code::Blocks でそれらにリンクするのを忘れていたのですが、リンクするとすぐに機能するようになりました。
コードなどに関する詳細情報が必要な場合は言ってください。