4

我尝试在运行 OS/X 10.13.1 High Sierra 的 iMac 上安装 meld。

brew cask install meld

并且homebrew没有错误地完成,但是当我尝试运行它时,我看到了

$ meld check1ping.sh check2pings.sh
frozen: ImportError
Cannot import: GTK+
dlopen(/Applications/Meld.app/Contents/Resources/lib/python2.7/gi/_gi.so, 2): Symbol not found: _inflateValidate
  Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
  Expected in: /Applications/Meld.app/Contents/Frameworks/libz.1.dylib
 in /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib

我注意到问题如何修复由于缺少“gi.repository”而导致的融合“无法导入:GTK+”错误?Meld 错误“无法导入:GTK+;没有名为存储库的模块”,但这个问题似乎有所不同。

我发现这个页面表明它/Applications/Meld.app/Contents/Frameworks/libz.1.dylib已经过时了。这是我看到的/Applications/Meld.app/Contents/Frameworks

-rwxr-xr-x  1 myusername  staff   127692  4 May  2016 libz.1.2.8.dylib
lrwxr-xr-x  1 myusername  staff       16 16 Nov 15:24 libz.1.dylib -> libz.1.2.8.dylib

寻找替代品,我发现:

lrwxr-xr-x  1 root  wheel      12 11 Nov 09:57 /usr/lib/libz.1.1.3.dylib -> libz.1.dylib
lrwxr-xr-x  1 root  wheel      12 11 Nov 09:57 /usr/lib/libz.1.2.11.dylib -> libz.1.dylib
lrwxr-xr-x  1 root  wheel      12 11 Nov 09:57 /usr/lib/libz.1.2.5.dylib -> libz.1.dylib
lrwxr-xr-x  1 root  wheel      12 11 Nov 09:57 /usr/lib/libz.1.2.8.dylib -> libz.1.dylib
-rwxr-xr-x  1 root  wheel  186432 25 Oct 17:37 /usr/lib/libz.1.dylib
lrwxr-xr-x  1 root  wheel      12 11 Nov 09:57 /usr/lib/libz.dylib -> libz.1.dylib

当我用这个替换我的meld应用程序中的 libz.1.dylib 时,一切都神奇地工作了。

我的问题是:如何修复自制软件,以便它选择正确版本的库,这样未来的用户就不会遇到这个问题?

我看到它brew cask 不能从源代码构建并且总是从二进制文件安装,所以我有点惊讶它似乎有错误的库版本。我找到了meld ruby​​ 文件,但并不聪明。恐怕我对指定 brew 或 cask 构建一无所知。

谢谢!

4

2 回答 2

3

不确定这是否有资格作为答案,但这里有。首先,感谢您确定问题的原因,因为它在升级到 MacOS High Sierra 后也影响了我。我不是homebrew专家,所以这个“答案”只是形式化了你的发现......

unlink /Applications/Meld.app/Contents/Frameworks/libz.1.dylib
ln -s /usr/lib/libz.1.dylib /Applications/Meld.app/Contents/Frameworks/libz.1.dylib

第一行删除了似乎是版本 1.2.8的 Meld本地(127692 字节,日期为 2016 年 5 月 4 日)的符号链接。 libz.1.dylib下一行重新创建了该符号链接,但指向全局(GTK+) libz.1.dylib(186432 字节,日期为 2017 年 10 月 25 日),可能版本为 1.2.11。

希望自制的 Meld cask 维护者能够引入适当的修复,但与此同时,在终端中运行这两个命令可以修复这个特定的 Meld 问题,以便 Meld 可以在 MacOS High Sierra 下运行。

于 2017-11-20T14:36:12.357 回答
2

现在已修复 上游。您需要做的就是更新 Meld 桶。

更新有点违反直觉。更新您使用的可用木桶列表brew update,不是brew cask update,而是将木桶升级到您使用的新版本brew cask upgrade,而不仅仅是brew upgrade.

所以更新所有已安装的木桶的正确顺序是:

brew update
brew cask upgrade
于 2018-01-23T15:42:28.297 回答