0

重启我的开发机器后,我的 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 问题,但我希望有工具来诊断和理解它。

4

1 回答 1

0

我仍然不知道1)的好答案。

对于 2) 可以从 Apple 文档中找到答案。此页面列出了所有影响 dylib 加载的环境变量及其默认值:https ://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/dyld.1.html

对于这个谜,为什么试图加载错误的路径:虽然我的环境没有设置任何有趣的变量,但我的构建工具(cargo run)在运行二进制文件之前设置了 DYLD_LIBRARY_PATH。这是因为此处解释的行为(不确定是否存在错误):https ://github.com/sgrif/pq-sys/commit/3ad9f7b77a6c4f50d5d7277bce05c836a62a4398

于 2017-01-04T12:40:53.973 回答