原c#下的项目使用了libusbdonet的库,基于libusb-0.1,官方不再推荐使用,最新版为1.0.22,新旧版本并不兼容

libusb有各种语言下的移植项目,对应c++下项目为?libusbpp 我的项目使用QT+MSVC2017 32bit

关注两个问题

首先是error LNK2001 LNK2019:无法解析的外部符号__imp___iob、__imp__sprintf等等

简单说这个错误的原因是引用的外部库,使用了过时的符号,据信VS2015进行了这样的符号更新,所以当msvc2015或更新的msvc使用早于msvc2015编译的外部库编译时,会引发LNK2001的错误

解决方法有两,硬核方法是针对无法解析的符号,在头文件中引用ms针对此问题推出的legacy_stdio_definitions库并且自定义其他缺少的符号,如下

 

另一种方法就简单多了,只需下载最新的源码,使用与项目相同的msvc重新编译一下就好了。

需要注意的是,混乱的使用编译器版本不是一个好主意。

 

其次,在解决上一问题后,仍然会报LNK2001/LNK2019错误,不过符号变为了__imp__OpenSCManagerA@12、 __imp__CloseServiceHandle@4、 __imp__OpenServiceA@12等等

直接在头文件中加入对Advapi32.lib的引用即可

 

1 对 “libusb-1.0在C++下引用”的想法;

回复 匿名 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注