【问题标题】:Linker error: unresolved symbol, when library formally included链接器错误:未解析的符号,当库正式包含时
【发布时间】:2014-12-28 14:47:48
【问题描述】:

链接器在调用 Inject_mod.obj 文件时给了我一个致命错误:

NtQuerySystemInformation@16

RtlAdjustPrivilege@16

在我的 ntdll.h 中定义,我从外部添加到我的项目中。但似乎编译器/链接器以某种方式看不到它,等等。

使用:Win8.1上的VC 2013,最初在Win7上创建的项目

UPD:项目资源管理器树:http://floomby.ru/s2/setKB5。有些话在信心的情况下已经模糊了。其他依赖项包含我的外部 ntdll.h 导致 ntdll.lib

【问题讨论】:

  • 能否请您扩展成完整的英文句子。
  • 我不确定只是将 *.lib 添加到项目中是你应该做的。您可能应该将其添加到项目设置中的链接器依赖项中
  • 它们是内部 Windows 实现函数,不打算由应用程序使用,并且可能会在 Windows 版本中发生变化。 Windows SDK 中没有可用的导入库来声明它们,您没有 ntdll.lib,因此链接器总是会抱怨它们。破解它的唯一方法是使用 GetProcAddress() 在 ntdll.dll 中查找导出的函数
  • 我有自己的 ntdll.lib 用于我的项目,我将它添加到依赖项和项目“包含”。

标签: c++ visual-studio-2013 linker symbols


【解决方案1】:

您不能通过在 Visual Studio 的解决方案视图中复制来使用 lib 文件。

您需要在链接器Input->Additional Dependencies 窗格中添加ntdll.lib 或任何静态库依赖项。

由于您尝试使用NtQuerySystemInformation be aware that

[NtQuerySystemInformation 可能在未来版本的 Windows 中被更改或不可用。应用程序应使用本主题中列出的替代功能。]

【讨论】:

  • 当然,我已将其添加到链接器中。顺便感谢您的链接。但是我有自己的 ntdll.lib,其中 NtQuerySystemInformation 被广泛定义。它应该有效,不是吗?
  • 检查您正在使用的签名并确保它们匹配
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
相关资源
最近更新 更多