重启我的开发机器后,我的 Rust 项目停止在 macOS 上运行。错误信息是:
dyld: Symbol not found: __cg_jpeg_resync_to_restart
Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
Expected in: /usr/local/lib/libJPEG.dylib
in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
我完全不知道发生了什么变化并导致了这种情况。问题似乎出在我的装备上,而不是代码上,因为它在 Docker 容器上运行良好,并且较旧的提交拒绝在我的计算机上运行。另一件事是我的项目不应该使用任何图像处理库。(而且我不知道如何列出 macOS 上的传递动态依赖项以检查它是否确实如此。)
otool -L /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
显示ImageIO
链接到/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib (compatibility version 1.0.0, current version 1.0.0)
. 该文件确实存在。/usr/local/lib/libjpeg.dylib
(我的 FS 不区分大小写)也存在,但它是自制文件的符号链接../Cellar/jpeg/8d/lib/libjpeg.dylib
,因此显然系统库不应该使用它。但是,据我所知,我没有设置LD_LIBRARY_PATH
或任何其他 env var 应该强制 macOS/usr/local/lib
用作 dylib 搜索路径。
所以我的问题是:
1)macOS上是否有工具可以检查我的项目中的哪些库链接(可能是可传递的)到ImageIO.framework
?
2) 在 macOS 上如何配置 dylib 搜索路径?是否有工具可以检查搜索了哪些路径以及以哪种优先顺序?问题本身可能是由于一些 Homebrew 问题,但我希望有工具来诊断和理解它。