我正在使用Visual Studio 2017编译程序,该程序链接到预编译的libusb静态版本,可用here。
当我尝试链接它时,我得到了一些未解析的符号,如these,答案指向legacy_stdio_definitions.lib
,它解决了除之外的所有链接器错误:
unresolved external symbol __imp__iob
This page from Microsoft谈及legacy_stdio_definitions.lib
并说它提供__imp___iob
但未提及__imp__iob
(请注意不同数量的下划线)。
这里发生了什么?
(另外,混合CRT版本是一个坏主意,我应该从源代码编译libusb。我知道。)
答案 0 :(得分:0)
在VS2018 - 32bit上与libusb有同样的问题,这对我有帮助:
Hacky解决方案:链接器抱怨某些功能缺失 - 所以只需将其提供给它 - 这样的函数应该返回定义的实现{{3} }。对于静态链接的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
更好的解决方案: 只需在VS 2018下重新编译静态库(我假设您也在使用它)并仔细阅读附带的自述文件。