fmod VS2008 неразрешенные внешние элементы в зависимом проекте

В настоящее время я пытаюсь использовать последнюю стабильную версию fmod ex в своем проекте.

У меня есть основной исполняемый файл в проекте с именем engine4, а также проект с именем DX9Platform в решении, от которого зависит ti. Весь код fmod находится в этом проекте DX9Platform, который генерирует файл lib.

DX9Platform включает fmodex_vc.lib и отлично строится. Однако сборка Engien4 приводит к неразрешенным сообщениям внешних символов, ссылающимся на файлы, которые используют fmod в проекте DX9Platform.

Я безуспешно пытался добавить fmodex_vc.lib в проект Engine4, как мне это исправить?

Вот вывод компоновщика:

3>------ Build started: Project: Engine4, Configuration: Release Direct3D9 Win32 ------
3>Linking...
3>DX9PlatformLib.lib(CFmodSound.obj) : error LNK2001: unresolved external symbol _FMOD_System_Create
3>DX9PlatformLib.lib(CFmodSound.obj) : error LNK2001: unresolved external symbol "public: enum FMOD_RESULT __thiscall FMOD::System::createSound(char const *,unsigned int,struct FMOD_CREATESOUNDEXINFO *,class FMOD::Sound * *)" (?createSound@System@FMOD@@QAE?AW4FMOD_RESULT@@PBDIPAUFMOD_CREATESOUNDEXINFO@@PAPAVSound@2@@Z)
3>DX9PlatformLib.lib(CFmodSound.obj) : error LNK2001: unresolved external symbol "public: enum FMOD_RESULT __thiscall FMOD::System::getVersion(unsigned int *)" (?getVersion@System@FMOD@@QAE?AW4FMOD_RESULT@@PAI@Z)
3>DX9PlatformLib.lib(CFmodSound.obj) : error LNK2001: unresolved external symbol "public: enum FMOD_RESULT __thiscall FMOD::System::init(int,unsigned int,void *)" (?init@System@FMOD@@QAE?AW4FMOD_RESULT@@HIPAX@Z)
3>DX9PlatformLib.lib(CFModAudioObject.obj) : error LNK2001: unresolved external symbol "public: enum FMOD_RESULT __thiscall FMOD::System::playSound(enum FMOD_CHANNELINDEX,class FMOD::Sound *,bool,class FMOD::Channel * *)" (?playSound@System@FMOD@@QAE?AW4FMOD_RESULT@@W4FMOD_CHANNELINDEX@@PAVSound@2@_NPAPAVChannel@2@@Z)
3>DX9PlatformLib.lib(CFModAudioObject.obj) : error LNK2001: unresolved external symbol "public: enum FMOD_RESULT __thiscall FMOD::Channel::getPaused(bool *)" (?getPaused@Channel@FMOD@@QAE?AW4FMOD_RESULT@@PA_N@Z)
3>DX9PlatformLib.lib(CFModAudioObject.obj) : error LNK2001: unresolved external symbol "public: enum FMOD_RESULT __thiscall FMOD::Channel::setPaused(bool)" (?setPaused@Channel@FMOD@@QAE?AW4FMOD_RESULT@@_N@Z)
3>DX9PlatformLib.lib(CFModAudioObject.obj) : error LNK2001: unresolved external symbol "public: virtual class IAudioObject * __thiscall CFModAudioObject::LoadFile(char const *)" (?LoadFile@CFModAudioObject@@UAEPAVIAudioObject@@PBD@Z)
3>D:\media\desktop\engine4\Engine4\Output\Release Direct3D9\Engine4.exe : fatal error LNK1120: 8 unresolved externals
3>Build log was saved at "file://d:\media\desktop\engine4\Engine4\Engine4\intermediate\Release Direct3D9\BuildLog.htm"
3>Engine4 - 9 error(s), 0 warning(s)
========== Build: 1 succeeded, 1 failed, 0 up-to-date, 1 skipped ==========

person Tom J Nowell    schedule 10.12.2009    source источник
comment
Вы можете опубликовать точный вывод компоновщика здесь? Это может быть несоответствие символов, вызванное какой-либо настройкой компилятора.   -  person Andrew Keith    schedule 10.12.2009
comment
У меня тоже есть эта проблема.   -  person Yuvi Masory    schedule 03.04.2010


Ответы (2)


Хитрость здесь в том, что использование C++ API никогда не будет работать из-за несоответствий компилятора, поэтому используйте C API везде, где это возможно.

Также имейте в виду, что некоторая документация fmod устарела. Определенный код будет «скомпилирован», но никогда не будет полностью слинкован/работает

person Tom J Nowell    schedule 03.04.2010

У меня была такая же проблема с 64-битной версией FMOD 4.32.02, скомпилированной под VS2005. Однако 32-битная версия подключается и работает так, как ожидалось, поэтому в настоящее время я использую ее.

На самом деле у меня была точно такая же проблема при использовании другой библиотеки, libsndfile. Когда я наткнулся на него во второй раз, я исключил возможность неправильной компиляции библиотеки. По-видимому, вы можете получить это с помощью любой 64-битной библиотеки.

К счастью, все, что вам нужно, это установить параметр компилятора. Я еще не пробовал, но есть множество информация из здесь.

person Courtney Christensen    schedule 08.10.2010