【问题标题】:brew cask install meld: 'cannot import GTK+': what's wrong with my library?brew cask install meld:'无法导入 GTK+':我的库有什么问题?
【发布时间】:2018-04-30 06:08:52
【问题描述】:

我尝试在运行 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

我注意到How do I fix melds 'Cannot import: GTK+' error caused by missing 'gi.repository'?Meld error "Cannot import: GTK+; No module named repository" 的问题,但这个问题似乎有所不同。

我发现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 时,一切都神奇地工作了。

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

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

谢谢!

【问题讨论】:

  • 现在已修复。我意识到,虽然要更新您使用 brew update 而不是 brew cask update 的木桶,但要升级木桶您必须运行 brew cask upgrade,而不仅仅是 brew upgrade
  • 嘿,非常感谢您的辛勤工作!我很高兴我不是唯一一个不能处理这些 ()&(*%&^! 事情的人。如果您想添加任何类型的答案,我会很乐意为它打勾你。

标签: homebrew macos-high-sierra homebrew-cask


【解决方案1】:

不确定这是否可以作为答案,但可以。首先,感谢您确定问题的原因,因为它在升级到 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

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

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

【讨论】:

  • 是的,这或多或少也是我所做的,感谢您的解释。我真正想了解的是预编译的应用程序(我认为理论上是完整的)是如何以不兼容的库结束的。以及如何从 homebrew-caskroom 找人来修复它。
【解决方案2】:

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

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

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

brew update
brew cask upgrade

【讨论】:

    猜你喜欢
    • 2018-03-06
    • 2023-03-14
    • 2014-07-10
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2017-12-28
    相关资源
    最近更新 更多