【问题标题】:what is the meaning of these linker errors?这些链接器错误是什么意思?
【发布时间】:2012-09-09 19:46:35
【问题描述】:

我希望我可以问“我需要链接哪些库”,但它非常具体(wwise 引擎集成),所以我需要帮助自己解决这个问题。当我尝试创建在头文件中定义的类型的变量时会出现问题(编译器发现头文件没有问题)。我收到 22 个链接器错误,但我不明白读出的内容,有人可以引导我完成它并准确地告诉我缺少哪个符号,这样我就可以弄清楚我缺少哪些库?除了没有链接的库之外,它可能是其他任何东西吗? Wwise 附带了一个演示项目,它可以编译但不会链接到比我更多的库。

这里有 5 个错误。我正在使用视觉工作室。

1>main.obj : error LNK2019: unresolved external symbol "public: enum AKRESULT __thiscall CAkDefaultIOHookBlocking::Init(struct AkDeviceSettings const &,bool)" (?Init@CAkDefaultIOHookBlocking@@QAE?AW4AKRESULT@@ABUAkDeviceSettings@@_N@Z) referenced in function "bool __cdecl InitSoundEngine(void)" (?InitSoundEngine@@YA_NXZ)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall CAkDefaultIOHookBlocking::GetDeviceDesc(struct AkDeviceDesc &)" (?GetDeviceDesc@CAkDefaultIOHookBlocking@@UAEXAAUAkDeviceDesc@@@Z)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual unsigned long __thiscall CAkDefaultIOHookBlocking::GetDeviceData(void)" (?GetDeviceData@CAkDefaultIOHookBlocking@@UAEKXZ)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual enum AKRESULT __thiscall CAkDefaultIOHookBlocking::Read(struct AkFileDesc &,struct AkIoHeuristics const &,void *,struct AkIOTransferInfo &)" (?Read@CAkDefaultIOHookBlocking@@UAE?AW4AKRESULT@@AAUAkFileDesc@@ABUAkIoHeuristics@@PAXAAUAkIOTransferInfo@@@Z)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual enum AKRESULT __thiscall CAkDefaultIOHookBlocking::Write(struct AkFileDesc &,struct AkIoHeuristics const &,void *,struct AkIOTransferInfo &)" (?Write@CAkDefaultIOHookBlocking@@UAE?AW4AKRESULT@@AAUAkFileDesc@@ABUAkIoHeuristics@@PAXAAUAkIOTransferInfo@@@Z)

【问题讨论】:

  • 如错误所述,缺少几个符号(均来自 CAkDefaultIOHookBlocking 类):InitGetDeviceDescGetDeviceDataReadWrite。无论库或目标文件包含CAkDefaultIOHookBlocking 类的实现,这都是您正在寻找的。谷歌搜索被称为“gmwwise”的东西被点击:code.google.com/p/gmwwise
  • 我希望您没有在针对 x64 的项目中链接 x86 库。
  • 据我所知,一切都是 x86。

标签: c++ visual-studio linker static-libraries


【解决方案1】:

符号是:

enum AKRESULT CAkDefaultIOHookBlocking::Init(struct AkDeviceSettings const &,bool)
virtual void CAkDefaultIOHookBlocking::GetDeviceDesc(struct AkDeviceDesc &)
virtual unsigned long CAkDefaultIOHookBlocking::GetDeviceData(void)
virtual enum AKRESULT CAkDefaultIOHookBlocking::Read(struct AkFileDesc &,struct AkIoHeuristics const &,void *,struct AkIOTransferInfo &)
virtual enum AKRESULT CAkDefaultIOHookBlocking::Write(struct AkFileDesc &,struct AkIoHeuristics const &,void *,struct AkIOTransferInfo &)

据我所知,您只有声明类CAkDefaultIOHookBlocking 的标头,这意味着您尝试使用需要链接到库的任何上述符号。

Wwise 附带了一个演示项目,它可以编译,但不会链接到比我更多的库。

要么不使用符号,要么在该项目中编译定义这些符号的源文件 - http://gmwwise.googlecode.com/svn-history/r2/trunk/GMWwise/wwise/AkDefaultIOHookBlocking.cpp

【讨论】:

  • 您是否根据读数 CAkDefaultIOHookBlocking::Init 解决了这个问题,例如,这是否告诉您声明缺少实现?我将 CAkDefaultIOHookBlocking.cpp 添加到项目中,清除了一些错误,但我仍然有 13 个类似的错误。如果其中之一是 "CAkFileLocationBase::CAkFileLocationBase(void)" ..." 是否意味着 CAkFileLocationBase 的实现在某处丢失?
  • 谢谢,它成功了。对于阅读本文并搜索过如何集成 wwise 的任何人,您需要将样本/声音引擎中的所有文件添加到项目中。仅 #include 默认 I/O 文件是不够的。
  • 或者像多维数据集项目那样链接到 soundendine.dll。
【解决方案2】:

您有一个文件AkDefaultIOHookBlocking.cpp 尚未添加到您正在构建的项目中。

【讨论】:

    猜你喜欢
    • 2013-12-29
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    相关资源
    最近更新 更多