brew cask install meld:'cannot import GTK+':我的图书馆出了什么问题?

brew cask install meld: 'cannot import GTK+': what's wrong with my library?

我试图在我的 iMac 运行ning OS/X 10.13.1 High Sierra 上安装 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

我注意到问题 and 但这个问题似乎有所不同。

我发现 this page 这表明 /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 cannot build from source and always installs from a binary, so I'm a bit surprised that it seems to have the wrong library version. I found the meld ruby file 但我 none 更聪明。恐怕我对指定 brew 或 cask 构建一无所知。

谢谢!

不确定这是否符合答案的条件,但可以。首先,感谢您确定问题的原因,因为在升级到 MacOS High Sierra 后,它也影响了我。我不是 homebrew 专家,所以这个 "answer" 只是将你发现的东西形式化...

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

第一行删除了符号 link 到 Meld 的 local libz.1.dylib(127692 字节,日期为 2016 年 5 月 4 日),这似乎是在版本1.2.8.下一行重新创建符号 link,但指向 global (GTK+) libz.1.dylib(186432 字节,日期为 2017 年 10 月 25 日),可能是版本 1.2.11 .

希望自制的 Meld cask 维护者会引入适当的修复,但与此同时,运行在终端中使用这两个命令修复了这个特定的 Meld 问题,以便 Meld 可以 运行 在 MacOS 下高山脉。

现在是 fixed upstream。您需要做的就是更新 Meld cask。

更新有点违反直觉。要更新可用 casks 列表,请使用 brew update,而不是 brew cask update,但要将 casks 升级到新版本,请使用 brew cask upgrade,而不仅仅是 brew upgrade.

因此更新所有已安装的 casks 的正确顺序是:

brew update
brew cask upgrade