Rust调用依赖GLFW的C代码时头文件缺失、符号未解析问题求助
问题根因
你遇到的LNK1181错误核心原因是库名不匹配,其次是链接搜索路径、依赖库缺失的问题,按以下步骤修改即可:
具体修改步骤
1. 修正Cargo.toml构建依赖
将原有的cc构建依赖替换为cmake:
[build-dependencies] cmake = "0.1.48"
2. 修正build.rs配置
你CMakeLists中通过add_library(c_project MyCFile.c)定义的库名为c_project,生成的静态库文件是c_project.lib而非MyCFile.lib,同时需要补充glfw依赖的Windows系统库、修正库搜索路径:
use cmake; fn main() { let dst = cmake::build("c_project"); // 补充lib子目录,cmake编译的静态库默认放在安装前缀的lib目录下 println!("cargo:rustc-link-search=native={}/lib", dst.display()); // 链接你自己的C库,注意库名和CMake定义的一致 println!("cargo:rustc-link-lib=static=c_project"); // 补充glfw在Windows平台依赖的系统库 println!("cargo:rustc-link-lib=dylib=user32"); println!("cargo:rustc-link-lib=dylib=gdi32"); println!("cargo:rustc-link-lib=dylib=shell32"); }
3. 可选校验(路径拼写检查)
检查你c_project下的依赖文件夹拼写:你项目结构里写的是dependecies(少了字母n),如果实际文件夹名是这个,要保证CMakeLists里的路径和实际拼写一致,否则会出现找不到glfw的错误。
验证方法
执行cargo clean清理之前的构建缓存,再执行cargo run即可正常运行。
内容的提问来源于stack exchange,提问作者Plegeus
相关产品推荐
相关产品推荐

