【问题标题】:fmod VS2008 unresolved externals in dependent projectfmod VS2008 依赖项目中未解决的外部问题
【发布时间】:2009-12-10 04:45:52
【问题描述】:

我目前正尝试在我的项目中使用最新的稳定 fmod ex。

我在名为 engine4 的项目中有一个主要的可执行文件,在解决方案中还有一个名为 DX9Platform 的项目,ti 依赖于该项目。所有的 fmod 代码都在这个 DX9Platform 项目中,它会生成一个 lib 文件。

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

【问题讨论】:

  • 你能在这里发布确切的链接器输出吗?可能是某些编译器设置导致的符号不匹配。
  • 我也有这个问题。

标签: visual-studio visual-studio-2008 fmod


【解决方案1】:

这里的诀窍是,由于编译器不匹配,使用 C++ API 将永远无法工作,因此请尽可能使用 C API。

另外请注意,某些 fmod 文档已过时。某些代码会“编译”,但永远不会完全链接/工作

【讨论】:

    【解决方案2】:

    我在 VS2005 下编译的 FMOD 4.32.02 64 位也遇到了同样的问题。但是,32 位版本的链接和工作正常,所以我目前正在使用它。

    在使用另一个库 libsndfile 时,我实际上遇到了完全相同的问题。当我第二次遇到它时,我排除了库编译错误的可能性。显然,您可以通过 any 64-bit library 获得此信息。

    幸运的是,您只需要设置一个compiler option我还没有尝试过,但是info 中有plentythere

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2016-05-06
      • 2018-04-15
      相关资源
      最近更新 更多