环境变量$RUSTFLAGS会将【编译器配置指令-L】传递给rustc核心和向Library Search Path清单临时添加一个新检索目录。
【重点强调】我已亲测:在.cargo\config.toml [build] rustflags = "***"配置项内,设置此-L编译器参数不管用 — 原因不详且和Cargo Book文档描述不符。
接着,若你的目标仅只是cargo build编译出一个.exe可执行文件,那么到这就可以打住了。
再续,若你的目标是cargo run既编译源码又运行可执行文件,那么还有一步需要被完成。即,使【C ABI动态链接库】对编译输出的.exe文件可见。否则,在应用程序启动过程中,会遇到(exit code: 0xc0000135, STATUS_DLL_NOT_FOUND)的错误和程序崩溃退出。其支持两种作法:
最后,执行cargo run命令,完成:
显示出GUI主界面。
在我的业务场景下,该应用程序是一个Win32 GUI App— 体积绝对碾压electron(比性能,算我欺负你)。
第三方crate可带来的好处
相比于直接写extern {...}块的简单粗暴,使用第三方crate(比如,dlopen)可带来的优势有两点:
遗憾·待续
运行时【动态链接】是将【依赖项】置于.exe文件之外的。若遇到链接库文件丢失的情况,应用程序就不能正常运行了。
所以,我的下一个目标就是:在编译时,将【静态链接库.a文件】直接编译入.exe可执行文件内,来避免dll文件意外丢失的问题(当然,.exe文件的体积也会更大些)。但是,我正遇到了一个mingw64的编译错误undefined reference to 'BCryptGenRandom'还未搞定。若你对此也有兴趣,请待我的后续更新...