1

現在、プロジェクトで最新の安定した fmod ex を使用しようとしています。

engine4 というプロジェクトにメインの実行可能ファイルがあり、ソリューションにも ti が依存する DX9Platform という名前のプロジェクトがあります。すべての fmod コードは、lib ファイルを生成するこの DX9Platform プロジェクトにあります。

DX9Platform には fmodex_vc.lib が含まれており、正常にビルドされます。ただし、Engien4 をビルドすると、DX9Platform プロジェクトで fmod を使用するファイルを参照する未解決の外部シンボル メッセージが発生します。

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 ==========
4

2 に答える 2

0

ここでの秘訣は、C++ API を使用してもコンパイラの不一致が原因で機能しないため、可能な限り C API を使用することです。

また、一部の fmod ドキュメントは古くなっていることに注意してください。特定のコードは「コンパイル」されますが、完全にリンク/動作することはありません

于 2010-04-03T01:16:27.780 に答える
0

VS2005でコンパイルされたFMOD 4.32.02 64ビットでも同じ問題がありました。ただし、32ビット版はリンクして期待どおりに動作するため、現在は32ビット版を代わりに使用しています.

別のライブラリ libsndfile を使用したときに、実際にまったく同じ問題が発生しました。2度目に遭遇したとき、ライブラリが間違ってコンパイルされた可能性を除外しました. どうやら、64ビットライブラリでこれを取得できるようです。

幸いなことに、必要なのはコンパイラ オプションを設定することだけです。まだ試していませんが、情報たくさんあります。

于 2010-10-08T00:05:53.637 に答える