继上一篇文章《Windows 11 搭建 Rust USB 开发环境之 GNU 版》,这篇主要总结一下安装 msvc
工具链的要点。
前置
- Windows 11 系统
- Microsoft C++ 生成工具,我装的是 2022 版,还有一些依赖,如
Windows 11 SDK
,参考 Windows上Rust所依赖的msvc到底怎么装? - rust 及其相关工具,如
cargo
、rustup
、rustc
。一般安装好 rust,这些工具都会包含在内。 - 下载
libusb
编译好的库,我下载的是 libusb-1.0.26
实战
项目根目录假定是 D:\projects\rust\libusb-demo
创建一个 rust 项目
打开一个命令提示符
后,执行以下命令
cargo new libusb-demo
cd libusb-demo
cargo add libusb
code .
写调用 libusb
的测试代码
在 Visual Studio Code 编辑器中编辑 src/main.rs
extern crate libusb;
fn main() {
let context = libusb::Context::new().unwrap();
for device in context.devices().unwrap().iter() {
let device_desc = device.device_descriptor().unwrap();
println!("Bus {:03} Device {:03} ID {:04x}:{:04x}",
device.bus_number(),
device.address(),
device_desc.vendor_id(),
device_desc.product_id());
}
}
配置
- 解压
libusb-1.0.26-binaries.7z
得到libusb-1.0.26-binaries
。 - 把
libusb-1.0.26-binaries
下的VS2015-x64
复制到D:\projects\rust\libusb-demo
下,并改名为libusb-x64
- 在
libusb-demo
下新建.cargo/config.toml
// .cargo/config.toml [target.x86_64-pc-windows-msvc.'usb-1.0'] # rustc-link-search = ['D:\projects\rust\libusb-demo\libusb-x64\dll'] # 这种是动态链接方式 rustc-link-search = ['D:\projects\rust\libusb-demo\libusb-x64\lib'] # 这种是静态链接方式 rustc-link-lib = ['libusb-1.0']
编译正式版
cargo build --release
验证
静态链接版
复制 target\release\libusb-demo.exe
到虚拟机里或另一台装有 Windows 的系统运行。
打开 命令提示符
,进入 C:\Users\Payton\Desktop
C:\Users\Payton\Desktop>libusb-demo.exe
Bus 003 Device 001 ID 0e0f:0003
Bus 001 Device 002 ID 0e0f:0002
Bus 003 Device 000 ID 15ad:0779
Bus 002 Device 000 ID 15ad:0770
Bus 003 Device 002 ID 0e0f:0002
Bus 003 Device 003 ID 0e0f:0002
Bus 001 Device 000 ID 15ad:0774
动态链接版
复制 target\release\libusb-demo.exe
和 libusb-x64\dll\libusb-1.0.dll
到虚拟机里或另一台装有 Windows 的系统运行。
打开 命令提示符
,进入 C:\Users\Payton\Desktop
,
- 如果没有复制
libusb-1.0.dll
C:\Users\Payton\Desktop>libusb-demo.exe
提示
- 复制
libusb-1.0.dll
C:\Users\Payton\Desktop>libusb-demo.exe Bus 003 Device 001 ID 0e0f:0003 Bus 001 Device 002 ID 0e0f:0002 Bus 003 Device 000 ID 15ad:0779 Bus 002 Device 000 ID 15ad:0770 Bus 003 Device 002 ID 0e0f:0002 Bus 003 Device 003 ID 0e0f:0002 Bus 001 Device 000 ID 15ad:0774
参考
附
- 项目目录