1

我有第三方库。(msvc10) 一个 MT/MD(静态配置文件)和动态 DLL 配置文件。
我有 qt + msvc10 express + win sdk.7

好的,我使用提供的现有示例,(使用库)我无法编译.....我有 4 个相同库的未解决的外部错误。(但我对其他人的错误为零)我不支持这些库......(但它们是合法的,我是没有权利的成员)

调查可能的修复的步骤是什么?我要去哪里看?谢谢。

编辑1:

错误是:

TD_ExamplesCommon.lib(ExHostAppServices.obj) : error LNK2019: unresolved external symbol __imp__RegEnumValueW@32 referenced in function "public: virtual bool __thiscall ExHostAppServices::ttfFileNameByDescriptor(class OdTtfDescriptor const &,class OdString &)" (?ttfFileNameByDescriptor@ExHostAppServices@@UAE_N ABVOdTtfDescriptor@@AAVOdString@@@Z)
TD_ExamplesCommon.lib(ExHostAppServices.obj) : error LNK2019: unresolved external symbol __imp__RegCloseKey@4 referenced in function "public: virtual bool __thiscall ExHostAppServices::ttfFileNameByDescriptor(class OdTtfDescriptor const &,class OdString &)" (?ttfFileNameByDescriptor@ExHostAppServices@@UAE_N ABVOdTtfDescriptor@@AAVOdString@@@Z)
TD_ExamplesCommon.lib(ExHostAppServices.obj) : error LNK2019: unresolved external symbol __imp__RegQueryValueExW@24 referenced in function "public: virtual bool __thiscall ExHostAppServices::ttfFileNameByDescriptor(class OdTtfDescriptor const &,class OdString &)" (?ttfFileNameByDescriptor@ExHostAppServices@@UAE_N ABVOdTtfDescriptor@@AAVOdString@@@Z)
TD_ExamplesCommon.lib(ExHostAppServices.obj) : error LNK2019: unresolved external symbol __imp__RegOpenKeyExW@20 referenced in function "public: virtual bool __thiscall ExHostAppServices::ttfFileNameByDescriptor(class OdTtfDescriptor const &,class OdString &)" (?ttfFileNameByDescriptor@ExHostAppServices@@UAE_N ABVOdTtfDescriptor@@AAVOdString@@@Z)
..\exe\OdaQtApp.exe : fatal error LNK1120: 13 unresolved externals

在这篇文章中,我收到了一个解决方案:我必须与 Advapi32.lib 链接......我的问题是:我怎么知道这个?
我已经尝试过dependencywalker,但它不能使用.lib的....

4

3 回答 3

11

在这篇文章中,我收到了一个解决方案:我必须与 Advapi32.lib 链接......我的问题是:我怎么知道这个?

当您从链接器收到“未解析的外部”错误时,这意味着它正在寻找某个目标文件所需的函数或变量名称的匹配项,并且链接器无法找到在其中一个目标文件中定义的名称或图书馆。

首先查看这些错误中的第一个(我已对其进行了一些重新格式化以使其更具可读性 - 我鼓励您下次遇到其中一个时也这样做):

TD_ExamplesCommon.lib(ExHostAppServices.obj) : error LNK2019: unresolved external symbol
      __imp__RegEnumValueW@32 referenced in function 
      "public: virtual bool __thiscall ExHostAppServices::ttfFileNameByDescriptor(
            class OdTtfDescriptor const &,class OdString &)"
      (?ttfFileNameByDescriptor@ExHostAppServices@@UAE_N ABVOdTtfDescriptor@@AAVOdString@@@Z)

该错误消息中有很多东西(其中大部分可能看起来像垃圾)。幸运的是,在大多数情况下可以忽略其中的大部分内容。最重要的一项是链接器正在寻找符号__imp__RegEnumValueW@32该名称上有一些垃圾,但幸运的是无论如何它都很容易识别。

  • 前缀表示它正在__imp__寻找 DLL 导入。在几乎所有情况下,出于您的目的可以忽略。
  • @32后缀是 Microsoft 编译器为某些调用约定添加到函数名称的东西。对于您的目的而言,它通常也不重要(作为记录,它表明该函数需要 32 个字节的参数数据)

所以我们留下了链接器正在寻找的事实RegEnumValueW。这看起来很像 Win32 API 的名称。

如果您查看文档RegEnumValueW(或RegEnumValue,因为许多 Win32 API 同时具有处理 ANSI/UNICODE 构建的一个A和一个W变体),我们将在文档中找到以下信息:

    Requirements

    Minimum supported client        Windows 2000 Professional
    Minimum supported server        Windows 2000 Server
    Header                          Winreg.h (include Windows.h)
 >> Library                         Advapi32.lib
    DLL                             Advapi32.dll
    Unicode and ANSI names          RegEnumValueW (Unicode) and 
                                    RegEnumValueA (ANSI)

这就是你知道你需要的方式advapi32.lib

因此,将来,当您从链接器收到“未解决的外部”错误时,只需忽略错误消息中的大部分内容并专注于它说找不到的符号 - 这应该会引导您访问库、对象文件或您可能丢失的其他项目。

仅作记录,advapi32.lib大多数 Windows 应用程序都需要任何复杂性。

于 2012-03-27T19:55:55.997 回答
0

您可以尝试使用dependencywalker来查看您的 dll 的依赖项列表并查看它缺少什么。

于 2012-03-27T09:10:23.020 回答
0

您是否在链接器选项中输入了 *.lib 文件?(输入-> 附加依赖项”),以及库目录选项中.lib 的路径?

于 2012-03-27T09:26:08.780 回答