1. 背景
上位机软件使用CyAPI.lib打开usb设备以及与usb设备进行交互
2. 在pro文件中添加静态库,一直提示找不到符号
2.1. 错误发生
qt添加如下
LIBS += -L$$PWD/third_party/lib/x86/ -lCyAPI
报错如下
2.2. 原因
cypress的FX3套件里给的cyapi是msvc编译的,如果QT使用的是mingw编译器,要用mingw重新编译一次,或者整个项目使用MCSC进行编译。
2.3. 解决历程
将qt的编译设置成使用MVSC进行编译
在qt的组件中下载MVSC的相关组件,在qt上方菜单 工具->选项->Kits->构建套件 中选择检测到的MVSC的环境
2.3.1. 构建套件Kits MVSC中出现黄色感叹号
原因:缺少windows debug工具
下载方式:
在控制面板->程序和功能中 找到你的 windows sdk ,选择更改 , 弹出对话框选择 change,next,弹出对话框勾选Debugging Tools for Windows , Change,
之后就可以成功检测到MVSC的相关套件
2.3.2. 构建套件的红色感叹号
可能是编译器选择不对,选择对应的编译器
配置对就能找到了
2.3.3. 上边的环境配置成功后,可能对已有项目的编译报语法错误,但是在使用mingw编译时是正常的
原因是两种编译使用的默认编码格式不同
- 默认编码格式:MSVC使用Windows默认的ANSI编码(通常是GBK或CP1252),而MinGW使用UTF-8作为默认的源文件编码格式。这意味着在使用这两个编译器时,源代码文件中的字符编码默认情况下是不同的。
- 字符串常量的编码格式:MSVC使用Windows默认的ANSI编码来解析字符串常量,而MinGW使用UTF-8编码来解析字符串常量。这意味着在源代码中使用的字符串常量的编码格式在这两个编译器中可能会有所不同。
- Windows API调用的编码格式:由于MSVC是Windows平台的官方开发工具链,它的Windows API调用默认使用Windows默认的ANSI编码。而MinGW是基于GNU工具链的开发环境,它的Windows API调用默认使用UTF-8编码。因此,在使用这两个编译器时,需要注意Windows API调用的编码格式,以确保正确传递和处理字符串参数。
将项目的编码格式替换载入,按编码保存就可以正常编译了。
2.3.4. LNK2019: 无法解析的四个外部符号
在.h 添加3个lib
#pragma comment(lib,"SetupAPI.lib")
#pragma comment(lib,"User32.lib")
#pragma comment(lib,"legacy_stdio_definitions.lib")
CyAPI.lib由Cypress提供;
SetupAPI.lib和User32.lib;可在C:\Program Files (x86)\Windows Kits\10\Lib\10.0.16299.0\um\x86目录下找到。legacy_stdio_definitions.lib文件可在C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\lib\x64目录下找到。
我的代码是
添加后可以成功将CyApi.lib添加到项目,并成功链接到符号。