我能使用Homebrew的Qt5和Capybara-webkit吗?

19

我希望使用qt5的QtWebKit来配合capybara-webkit使用。

brew uninstall qt
Uninstalling /usr/local/Cellar/qt/4.8.4...
brew install qt5
This formula is keg-only: so it was not symlinked into /usr/local.
  /usr/local/Cellar/qt5/5.0.2: 3103 files, 140M, built in 60.9 minutes

如果我强制使用brew为qt5创建符号链接,我就可以构建capybara-webkit的本地扩展。
brew link --force qt5
Linking /usr/local/Cellar/qt5/5.0.2... 122 symlinks created
gem install capybara-webkit -v '1.0.0'
Successfully installed capybara-webkit-1.0.0

但是webkit_server崩溃得非常严重。

bundle exec rake test:integration
Errno::EADDRNOTAVAIL: Can't assign requested address - connect(2)
dyld: Library not loaded: /private/tmp/qt5-KytU/qt-everywhere-opensource-src-5.0.2/qtwebkit/lib/QtWebKit.framework/Versions/5/QtWebKit
  Referenced from: /usr/local/opt/qt5/lib/QtWebKitWidgets.framework/Versions/5/QtWebKitWidgets
  Reason: image not found

请参考完整的OSX崩溃报告

我尝试使用LDFLAGSCPPFLAGS安装capybara-webkit,但webkit_server仍然严重崩溃。

env LDFLAGS=-L/usr/local/opt/qt5/lib \
  CPPFLAGS=-I/usr/local/opt/qt5/include \
  gem install capybara-webkit -v '1.0.0'

你最终解决了这个问题吗? - dgilperez
我放弃了,继续使用qt4。我目前并不需要qt5的任何功能。 - Jared Beck
4个回答

28

注意: 我是IAmNaN...这个回答对于El Cap和Yosemite有效,但是自MacOS Sierra以来不再相关。 取而代之,请按照Thoughtbot的说明进行操作。总结如下...

  1. 此处下载并安装新的Qt。
  2. 编辑~/Qt5.5.1/5.5/clang_64/mkspecs/features/mac/default_pre.prf
  3. 在第15行左右找到 -find xcrun 2, 将其替换为 -find xcodebuild 2
  4. 保存并运行PATH=~/Qt5.5.1/5.5/clang_64/bin:$PATH gem install capybara-webkit

现在回到我们通常的答案....

我已经在OSX Yosemite上成功运行它。构建针对Qt5的原因是为了获得一些不在Qt4中修复的问题,这些问题导致capybara-webkit在某些情况下无法使用字体和样式表资源。

从您的gemfile中注释掉capybara和capybara-webkit gem。然后执行:

bundle
gem uninstall capybara-webkit
gem uninstall capybara # if it complains about dependencies 'gem uninstall' them first
brew remove qt
brew remove qt5 # if you've been playing around

从一个干净的环境开始(重新启动您的终端):

brew tap homebrew/versions
brew install qt55
brew linkapps qt55
brew link --force qt55

在gemfile中取消注释capybara和capybara-webkit,然后运行:

bundle install

注意:您可以安全地忽略由brew doctor发出的“brew unlink”警告。


1
在执行 brew link --force qt5 命令时,我遇到了错误提示:"Error: Could not symlink lib/cmake/Qt5 /usr/local/lib/cmake is not writable." 因此,我使用 "sudo chown [my-user] /usr/local/lib/cmake" 命令更改了目录的所有者,并重新执行了 brew link --force qt5 命令,成功安装了 bundle。最后,我还恢复了该目录的所有权。 - Dan Sandland
4
请注意,根据官方capybara-webkit安装说明(链接在此处:https://github.com/thoughtbot/capybara-webkit/wiki/Installing-Qt-and-compiling-capybara-webkit),自Qt版本5.6开始,qt5将不再包含QtWebKit,因此该gem支持的最后一个版本是qt5.5。这意味着您应该将上述每个安装/链接命令中的“qt5”替换为“qt55”。 - Jeehut
我已经更新了答案。感谢@Dschee在三年后仍然帮助保持这个答案的最新状态。 - IAmNaN

7
两年后,我之前提出的问题的解决步骤现在可以正常运行。感谢修复此问题的人。
gem uninstall --all capybara-webkit
brew remove qt
brew install qt5
brew linkapps qt5 # optional?
brew link --force qt5
gem install capybara-webkit

安装了Qt5之后,我的测试套件不再显示这个消息:
WARNING: The next major version of capybara-webkit will require at least version 5.0 of Qt.

卸载capybara gem不是必须的(正如其他答案所建议的那样),因为它没有本地扩展,因此没有直接依赖于QT。

我可以确认 brew linkapps qt5 不是必需的。 - Sid

4

对于我2013年的问题不适用,但仍然有用。我不知道qt55包,谢谢! - Jared Beck

0
我建议执行以下操作:brew updatebrew remove qt5brew install qt5。因为在我的系统上,我发现:
xcrun otool -L /usr/local/Cellar/qt5/5.0.2/lib/QtWebKitWidgets.framework/Versions/5/QtWebKitWidgets
[snip] 
/usr/local/Cellar/qt5/5.0.2/src/qtwebkit/lib/QtWebKit.framework/Versions/5/QtWebKit (compatibility version 5.0.0, current version 5.0.2)

因此,Qt5确实链接了QtWebKit,并且在我的系统上链接是有效的,而与您的系统相反。因此建议重新安装。如果homebrew安装了预构建瓶并仍然存在此问题,请在GitHub上向Homebrew的问题跟踪器报告。我从源代码安装了我的。

但是,我认为一个上游问题(一个较小的问题)是链接指向src,这可能应该是lib。但这取决于Qt来修复。


1
谢谢,我会尝试重新安装并查看otool输出是否有变化。我还没有时间。Qt编译需要大约10年的时间... - Jared Beck
@JaredBeck - 我在2015年阅读过这篇内容,现在仍然适用。另外,你的评论让我笑了。 - flanger001
@flanger001 是的,才过了两年,还有八年编译的路要走 ;) - Jared Beck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接