【问题标题】:Linker doesn't see function inside .lib链接器在 .lib 中看不到函数
【发布时间】:2012-04-02 23:59:19
【问题描述】:

我正在使用 Visual Studio C/C++ 编写一个小型 Win32 应用程序,该应用程序使用 WDK 与 HID 设备通信。

我在选项 > 项目和解决方案 > VC++ 目录中添加了以下包含目录:

D:\WinDDK\7600.16385.1\inc\ddk
D:\WinDDK\7600.16385.1\inc\api

还有如下库目录:

D:\WinDDK\7600.16385.1\lib\win7\i386

我还将以下 lib 文件设置为 Project Properties > Configuration Properties > Linker > Additional Dependencies:

hid.lib

但是当我尝试编译时,我得到:

error LNK2028: unresolved token (0A000040) "unsigned char __stdcall HidD_SetOutputReport(void *,void *,unsigned long)" ...

虽然,这应该在 hid.lib 中

我错过了什么吗?

-- 更新-- 在 SooWeiTan 的建议下,我启用了 Properties->Linker->Show Progress,现在我在这里看到以下内容:

1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\MSCOREE.lib:
1>      Found __CorExeMain@0
1>        Loaded MSCOREE.lib(mscoree.dll)
1>      Found __IMPORT_DESCRIPTOR_mscoree
1>        Referenced in MSCOREE.lib(mscoree.dll)
1>        Loaded MSCOREE.lib(mscoree.dll)
1>      Found mscoree_NULL_THUNK_DATA
1>        Referenced in MSCOREE.lib(mscoree.dll)
1>        Loaded MSCOREE.lib(mscoree.dll)
1>    Searching D:\WinDDK\7600.16385.1\lib\win7\i386\hid.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\kernel32.lib:
...
...
...

据此,我认为它在 hid.lib 中没有发现任何有趣的东西,而它应该找到我的麻烦功能......知道为什么会发生这种情况吗?

【问题讨论】:

  • 信息不足。示例:您可能正在尝试链接错误的位数。此外:使用 VisualDDK 并“免费”获取预配置项目。
  • 我会启用 Properties->Linker->Show Progress 并观察输出。
  • @STATUS_ACCESS_DENIED 创建一个只与驱动程序对话的 Windows 应用程序是否有效?我以为那是你想写驱动程序的时候……
  • @SooWeiTan 我一回家就试试看
  • @Nicolae:对,对不起。那么DDKWizard可能是要走的路。它允许基于 msvcrt.dll(VS 6 C 运行时)创建“普通”Win32 项目。

标签: c++ c visual-studio linker


【解决方案1】:

我看到你可能有 MS SDK。

  • 启动cmd.exe,
  • 转到“C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\”——你的可能是 6.0
  • 运行“SetEnv.cmd /x86”
  • 进入 lib 所在目录
  • 运行“dumpbin /exports hid.lib | findstr HidD_SetOutputReport”

如果你什么也没得到,很明显 lib 不包含该函数(不妨尝试只尝试函数名称的某些部分以确保)。如果你得到一些东西,那么 lib 的路径是错误的。这真的是所有可能导致问题的原因。如果运行 setenv 有问题,其他方法应该是使用您正在使用的 MSVC 进入目录,然后转到 VC\bin 并运行 vcvars32.bat,应该会做同样的事情。

【讨论】:

  • 按照你的指令,现在dumbbin.exe会输出_HidD_SetOutputReport@12。如果您查看该问题的更新,您会在链接器的输出中看到它在 WDK 中看到 hid.lib,只是它没有在其中找到函数 ...
【解决方案2】:

我很惭愧地说我发现了问题:(。我是 C\C++ 菜鸟,但仍然......

当我在 c++ 文件中导入 C 模块时,include 周围没有 extern "C" :|

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 2014-10-20
    相关资源
    最近更新 更多