运行gstreamer-rs教程时遇libgobject-2.0.0.dylib未加载错误求助
解决macOS下gstreamer-rs运行时找不到libgobject-2.0.0.dylib的问题
运行gstreamer-rs教程代码时触发错误:
dyld[62967]: Library not loaded:... @rpath/libgobject-2.0.0.dylib '/usr/lib/libgobject-2.0.0.dylib' (no such file, not in dyld cache)
已知libgobject-2.0.dylib实际位于/Library/Frameworks/GStreamer.framework/Versions/1.0/lib目录,项目配置和代码如下:
项目配置(Cargo.toml)
[package] name = "gstreamerDemo" version = "0.1.0" edition = "2021" [dependencies] glib = { git = "https://github.com/gtk-rs/gtk-rs-core" } gdk = { git = "https://github.com/gtk-rs/gtk3-rs", optional = true } gtk = { git = "https://github.com/gtk-rs/gtk3-rs", optional = true } gst = { version = "0.20.2", package = "gstreamer" } [target.'cfg(target_os = "macos")'.dependencies] cocoa = "0.24" objc = "0.2.7"
最小化代码示例
#[path = "../common.rs"] mod tutorials_common; fn tutorial_main() { // Initialize GStreamer gst::init().unwrap(); ... }
解决方案
1. 临时设置环境变量
运行程序前,先指定动态库搜索路径:
export DYLD_LIBRARY_PATH=/Library/Frameworks/GStreamer.framework/Versions/1.0/lib:$DYLD_LIBRARY_PATH export DYLD_FRAMEWORK_PATH=/Library/Frameworks/GStreamer.framework/Versions/1.0:$DYLD_FRAMEWORK_PATH cargo run
2. 编译时指定rpath(永久生效)
在Cargo.toml中添加编译配置,让生成的可执行文件自带正确的库搜索路径:
[profile.dev] rustflags = [ "-C", "link-arg=-Wl,-rpath,/Library/Frameworks/GStreamer.framework/Versions/1.0/lib", ] [profile.release] rustflags = [ "-C", "link-arg=-Wl,-rpath,/Library/Frameworks/GStreamer.framework/Versions/1.0/lib", ]
3. 统一依赖版本
当前配置中glib使用git最新版,而gstreamer是0.20.2版本,版本不匹配可能导致链接逻辑异常。将glib改为对应版本:
[dependencies] glib = "0.20.0" # 与gstreamer 0.20.2版本匹配 gst = { version = "0.20.2", package = "gstreamer" } # 其他依赖保持不变
验证步骤
先确认库文件存在:
ls /Library/Frameworks/GStreamer.framework/Versions/1.0/lib/libgobject-2.0.0.dylib
确认文件存在后再执行上述解决方案。
内容的提问来源于stack exchange,提问作者royB
相关产品推荐
相关产品推荐

