未解析的符号`__imp__iob`,而不是`__imp__iob`

Tim*_*mmm 6 msvcrt visual-c++

我正在使用 Visual Studio 2017 编译一个程序,该程序与 libusb 的预编译静态版本链接,可在此处获得

当我尝试链接它时,我得到了一些像这些未解析的符号,答案指向我legacy_stdio_definitions.lib解决了所有链接器错误,除了

unresolved external symbol __imp__iob
Run Code Online (Sandbox Code Playgroud)

微软的这个页面谈论legacy_stdio_definitions.lib并说它提供__imp___iob但没有提到__imp__iob(注意不同数量的下划线)。

这里发生了什么?

(另外,是的,混合 CRT 版本是一个坏主意,我真的应该从源代码编译 libusb。我知道。)

Kup*_*pto 5

在 VS2018 - 32 位上的 libusb 遇到同样的问题,这对我有帮助:

  1. Hacky 解决方案:链接器抱怨某些缺少的函数 -所以只需将其交给它- 这样的函数应该返回实现定义的IO 函数指针。对于静态链接的 libusb-1.0,我必须将以下内容添加到我的代码中:

    #pragma comment(lib, "legacy_stdio_definitions.lib")
    #ifdef __cplusplus
    FILE iob[] = { *stdin, *stdout, *stderr };
    extern "C" {
        FILE * __cdecl _iob(void) { return iob; }
    }
    #endif
    
    Run Code Online (Sandbox Code Playgroud)
  2. 更好的解决方案:只需在 VS 2018 下重新编译静态库(我假设您也在使用)并仔细遵循随附的自述文件。

  • 是的,最后我放弃了,自己编译libusb。 (2认同)