Rust引入egui_glfw_gl依赖后glfw-sys编译失败问题
问题描述
在Rust环境做OpenGL开发时,为实现参数实时调整的交互功能,计划集成egui库,选用依赖为egui_glfw_gl 0.13.1。把该依赖加入Cargo.toml后项目无法构建,执行cargo run触发glfw-sys编译错误,未加该依赖前项目可正常编译运行,已有可正常工作的3D场景。
报错输出
PS opengl_t_2> cargo run Compiling glfw-sys v3.3.5 error: failed to run custom build command for `glfw-sys v3.3.5` Caused by: process didn't exit successfully: `opengl_t_2\target\debug\build\glfw-sys-d98b92fc73a7f019\build-script-build` (exit code: 101) --- stdout CMAKE_TOOLCHAIN_FILE_x86_64-pc-windows-msvc = None CMAKE_TOOLCHAIN_FILE_x86_64_pc_windows_msvc = None HOST_CMAKE_TOOLCHAIN_FILE = None CMAKE_TOOLCHAIN_FILE = None CMAKE_GENERATOR_x86_64-pc-windows-msvc = None CMAKE_GENERATOR_x86_64_pc_windows_msvc = None HOST_CMAKE_GENERATOR = None CMAKE_GENERATOR = None CMAKE_PREFIX_PATH_x86_64-pc-windows-msvc = None CMAKE_PREFIX_PATH_x86_64_pc_windows_msvc = None HOST_CMAKE_PREFIX_PATH = None CMAKE_PREFIX_PATH = None CMAKE_x86_64-pc-windows-msvc = None CMAKE_x86_64_pc_windows_msvc = None HOST_CMAKE = None CMAKE = Some("C:\\Program Files\\CMake\\bin\\") running: "C:\\Program Files\\CMake\\bin\\" "C:\\Users\\Vasily\\.cargo\\registry\\src\\github.com-1ecc6299db9ec823\\glfw-sys-3.3.5\\." "-G" "Visual Studio 16 2019" "-Thost=x64" "-Ax64" "-DGLFW_BUILD_EXAMPLES=OFF" "-DGLFW_BUILD_TESTS=OFF" "-DGLFW_BUILD_DOCS=OFF" "-DCMAKE_INSTALL_LIBDIR=lib" "-DCMAKE_INSTALL_PREFIX=opengl_t_2\\target\\debug\\build\\glfw-sys-52652cf8f267b532\\out" "-DCMAKE_C_FLAGS= -nologo -MD -Brepro" "-DCMAKE_C_FLAGS_DEBUG= -nologo -MD -Brepro" "-DCMAKE_CXX_FLAGS= -nologo -MD -Brepro" "-DCMAKE_CXX_FLAGS_DEBUG= -nologo -MD -Brepro" "-DCMAKE_ASM_FLAGS= -nologo -MD -Brepro" "-DCMAKE_ASM_FLAGS_DEBUG= -nologo -MD -Brepro" "-DCMAKE_BUILD_TYPE=Debug" --- stderr thread 'main' panicked at ' failed to execute command: program path has no file name
原有依赖配置
[dependencies] cgmath = "0.16.1" gl = "0.10.0" image = "0.19.0" tobj = "0.1.6" num = "0.2.0" rand = "0.5.5" egui = "0.17.0" egui_glfw_gl = "0.13.1" [dependencies.glfw] git = "https://github.com/bjz/glfw-rs.git" default-features = false
解决方法
根因
报错直接原因是系统环境变量里的CMAKE路径配置错误:当前配置的路径是C:\Program Files\CMake\bin\,只写到了bin目录,没有指定具体的可执行文件cmake.exe,glfw-sys构建脚本直接调用这个路径时,识别不到有效程序名,直接panic。
之前没加egui依赖时能正常编译,是因为之前的构建缓存没有触发对应版本glfw-sys的CMake完整调用流程,新增依赖后cargo拉取了匹配版本的glfw-sys重新编译,才把这个隐藏的环境配置问题暴露出来。
操作步骤
- 修复CMAKE路径配置
- 打开Windows系统环境变量编辑面板,找到用户变量或系统变量中的
CMAKE条目,将变量值修改为C:\Program Files\CMake\bin\cmake.exe,保存后关闭所有已打开的终端窗口,重新打开终端让配置生效。 - 如果不想修改全局环境变量,可以在当前编译用的终端里临时指定路径,执行命令:
$env:CMAKE="C:\Program Files\CMake\bin\cmake.exe"
- 打开Windows系统环境变量编辑面板,找到用户变量或系统变量中的
- 清理旧构建缓存,在项目根目录执行:
cargo clean - 重新执行编译运行命令:
cargo run
如果完成上述操作后出现glfw版本相关的链接错误,是因为当前用的glfw是git拉取的开发分支,和egui_glfw_gl 0.13.1依赖的glfw正式版存在版本不兼容问题,把Cargo.toml里原来的git源glfw配置删掉,替换成crates.io正式版即可:
glfw = { version = "0.46.0", default-features = false }
内容的提问来源于stack exchange,提问作者Vasily Levitskiy
相关产品推荐
相关产品推荐

