2016-11-24 112 views
0

重啓我的開發機器後,我的Rust項目停止在macOS上運行。錯誤信息是:macOS上的動態鏈接:ImageIO.framework從錯誤的路徑看起來如何?

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搜索路徑?有沒有一種工具來檢查哪些路徑被搜索以及哪個首選順序?這個問題本身可能是由於一些自制軟件問題,但我想有工具來診斷和理解它。

回答

0

我還是不知道1)的好答案。

對於2)答案可以從Apple文檔中找到。此頁面列出所有影響dylib加載的環境變量及其默認值:https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/dyld.1.html

爲了解釋這個謎題,爲什麼試圖加載錯誤的路徑:雖然我的環境沒有任何有趣的變量集,但我的構建工具(cargo run)在運行二進制文件之前設置DYLD_LIBRARY_PATH。這是因爲在這裏解釋的行爲(不知道是否bug):https://github.com/sgrif/pq-sys/commit/3ad9f7b77a6c4f50d5d7277bce05c836a62a4398