前面我们介绍了Linux下搭建libusb开发环境。参见《https://mp.weixin.qq.com/s/i9QOBc9hprwg6VGexh_Bhw》和《https://mp.weixin.qq.com/s/kxtcLUZKAS8DeVEGHx3bHw》也介绍了在windows下基于MSVC开发参见《https://mp.weixin.qq.com/s/fYLEeHXhKQ96zKCMFCrphQ》。
本文继续介绍Windows下基于VSCODE+Mingw开发。
https://repo.msys2.org/distrib/x86_64/下下载最新版本
下载后打开开始安装
打开MSYS2 MinGW 64-bit
pacman -S mingw-w64-ucrt-x86_64-gcc
提示时输入y回车
gcc --version查看版本
安装git,提示输入时输入y回车
pacman -Sy
pacman -S git
安装tree用于查看文件树形结构
pacman -S tree
输入
pacman -Syu更新
提示时输入y回车
下载源码
git clone https://github.com/libusb/libusb.git
进入源码路径
cd libusb/
自动生成
./autogen.sh
配置
./configure
构建和安装
make && make install
使用源码的样例代码测试
进入样例代码路径
cd examples/
编译
make
这里只编译了xusb,因为其他的在前面make时已经编译了
单独编译某一个例程比如listdevs可以用
make listdevs
运行测试程序
make编译了很多测试程序,比如运行listdevs
./listdevs
打印如下
上面examples目录下提供了Makefile进行所有的样例的编译,我们也可以手动编译我们自己的应用或者某个样例程序,比如-lusb-1.0链接libusb库,-I指定头文件路径,-L指定库文件路径。
gcc listdevs.c -I../libusb -lusb-1.0 -L../libusb
-g编译
gcc listdevs.c -I../libusb -lusb-1.0 -L../libusb -g -o listdevs
使用gdb调试
gdb listdevs
b main 断点在main函数出
run 运行
以上先构建库然后链接库的方式DEBUG时看不到libusb的源码,我们可以直接使用libusb的源码和自己的应用代码一起编译,这样方便调试阅读源码。
复制以下内容到自己的工程目录下
复制libusb下的如下内容
core.c
descriptor.c
hotplug.c
Io.c
libusb.h
libusbi.h
sync.c
version.h
version_nano.h
strerror.c
复制libusb/os下的如下内容
events_windows.c
events_windows.h
threads_windows.c
threads_windows.h
windows_common.c
windows_common.h
windows_usbdk.c
windows_usbdk.h
windows_winusb.c
windows_winusb.h
examples下的listdevs.c
同时复制config.h文件过来
最终目录如下
.
├── examples
│ ├── config.h
│ ├── dpfp.c
│ ├── ezusb.c
│ ├── ezusb.h
│ ├── fxload.c
│ ├── hotplugtest.c
│ ├── listdevs.c
│ ├── sam3u_benchmark.c
│ ├── testlibusb.c
│ └── xusb.c
└── libusb
├── core.c
├── descriptor.c
├── hotplug.c
├── io.c
├── libusb.h
├── libusbi.h
├── os
│ ├── events_windows.c
│ ├── events_windows.h
│ ├── threads_windows.c
│ ├── threads_windows.h
│ ├── windows_common.c
│ ├── windows_common.h
│ ├── windows_usbdk.c
│ ├── windows_usbdk.h
│ ├── windows_winusb.c
│ └── windows_winusb.h
├── strerror.c
├── sync.c
├── version.h
└── version_nano.h
4 directories, 30 files
编译命令如下
cd examples
gcc ../libusb/*.c ../libusb/os/events_windows.c ../libusb/os/threads_windows.c ../libusb/os/windows_common.c ../libusb/os/windows_usbdk.c ../libusb/os/windows_winusb.c ./listdevs.c -I../libusb -I../libusb/os -I. -lpthread -g -o listdevs.exe
使用GDB调试
gdb listdevs.exe
打印如下
layout src打开源码视图
b main在main函数处打断点
输入run回车,执行到断点处
按s,单步运行可以进入libusb的源码中进行调试
安装Visual Studio Code,安装C/C++扩展插件
将mingw的安装路径的bin添加到系统环境变量Path中
D:\msys64\mingw64\bin
此时CMD中就可可以使用gcc等
使用vscode打开文件夹
D:\msys64\home\qinyunti\libusbtest
配置vscode的终端为mingw
添加.vscode文件夹,添加settings.json内容如下
"terminal.integrated.shell.windows": "D:\\msys64\\msys2_shell.cmd",
"terminal.integrated.shellArgs.windows": ["-defterm", "-mingw64", "-no-start", "-here"]
创建task.json和launch.json和linux下一样不再赘述,内容分别如下
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Build",
"type": "shell",
"command": "gcc libusb\\*.c libusb\\os\\events_windows.c libusb\\os\\threads_windows.c libusb\\os\\windows_common.c libusb\\os\\windows_usbdk.c libusb\\os\\windows_winusb.c examples\\listdevs.c -Ilibusb -Ilibusb\\os -Iexamples -lpthread -g -o listdevs.exe",
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/listdevs.exe",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
}
]
}
编译
Terminal->Run Build Task...
调试
Run -> Start Debugging
可以进行调试
Windows下基于MinGW与Linux下进行libusb开发类似, 跨平台上更方便,所以建议使用该方式。