【问题标题】:How can I get Qt4 running with ruby 1.9.2 on Windows 7?如何让 Qt4 在 Windows 7 上运行 ruby​​ 1.9.2?
【发布时间】:2011-11-26 11:52:53
【问题描述】:

总结

我正在编写一个使用 Qt4 作为其 GUI 的 Ruby 1.9.2 应用程序,我想在 Linux、OS X 和 Windows 上分发它。除了我的 Windows 7 64 位机器外,我的应用程序在所有设备上都运行良好。

有 Win7 + Qt4 + 1.8.7 的工作示例,但显然不是 Win7 + Qt4 + 1.9.2。 Ruby-Qt 绑定有两个 gem,qtbindingsqtruby4(有时称为qt4-qtruby),但我还没有看到它们在 Win7 上运行 Ruby 1.9.2。

qtruby4 的问题

This article from October 2008 和它的updated version from June 2011 是很好的起点,但我通过RubyInstaller for Windows' download page 安装Ruby 1.9.2 与后者不同。 1.8.7 似乎工作正常,但是当我尝试使用 1.9.2 时,我遇到了一些不寻常的错误。要求 'rubygems' 然后要求 'Qt' 导致:

no such file to load -- 'qtruby4'

上面的第一篇文章链接到more in-depth article from dr1ku,这可能会提供一些线索。

  • 可能值得用这些库的最新版本重现 dr1ku 的步骤。
  • dr1ku 和 2008 paschenda.org 文章都使用了special Windows Qt4-QtRuby installer,但维护者指出他使用了hasn't had the time to update it。我不完全清楚特殊安装程序的作用,但我想 paschenda.org 的 2011 年文章不再使用它,因为 DevKit 表面上帮助 RubyGems 自己在没有帮助的情况下构建 Qt4。

在野外发现

这里有些人似乎遇到了同样的问题:

qtbindings 的问题

我的应用实际上使用了qtbindings gem,所以我尝试使用gem install qtbindings --platform=mswin32 安装它。[1]但是,当我尝试在安装了 qtbindings gem 的情况下使用 require 'Qt' 时,我收到了一个带有以下消息的 Windows 弹出窗口:

无法定位程序入口点_Z10qvsnprintfPcjPKcS_ 在动态链接库 QtCore4.dll 中。放弃吧,下等肉体。

(我已经复制并粘贴了消息,没有任何修饰。)

在野外发现

这里有些人似乎遇到了同样的问题:

潜在的成功案例

如果您查看对此线程的回复,似乎有人通过在 1.9.2 上使用 gem install qtbindings(没有 --platform 参数)安装 qtbindings gem 取得了成功:

我尝试在 1.8.7 上使用 gem install qtbindings 进行安装,但我没有在 1.9.2 上尝试过。当我在 1.8.7 中尝试时,我遇到了和以前一样的“无法找到程序入口点”的问题。

脚注

[1] - 我实际上并不完全清楚 qtbindings gem 和 qtruby4 gem 之间的区别。例如,后者是否包含 C 扩展而前者不包含?我不知道。此外,我看到了对 qt4-qtruby 的引用,我认为只是 qtruby4 的 mswin32 版本,至少就我从 Korundum download page 可以看出的而言。

【问题讨论】:

  • 您是否有可能包含一个可以证明问题的四行应用程序?
  • @sarnold - 只要您尝试require 'Qt',问题就会出现,因此即使是 4 行示例也会过大。这就是您在文件中查看问题所需要的全部内容:require 'rubygems'; require 'Qt'
  • 猜测:1.8.7 安装程序包含标准 C 库作为安装的一部分,而 1.9.2 安装程序没有。 MinGW relies on the MSVCRT.DLL from Microsoft 用于运行时 C 库,也许它没有与 1.9.2 Ruby 一起安装?
  • @sarnold 这是可能的,但是错误消息不是针对较低级别的内容,而不是“没有要加载的此类文件 - 'Qt'”吗?
  • hrm,我忽略了这里有 两个 不同的错误——我主要关注缺少的 vsnprintf 错位函数。所涉及的所有库的ldd 输出是什么样的?

标签: ruby windows-7 qt4 ruby-1.9 qtruby


【解决方案1】:

解决方案

以下步骤适用于 Windows 7:

  1. 通过the official download page 安装Ruby 1.9.2。
  2. 在 Windows shell 中,运行 gem install qtbindings

这个简单的例子 (require 'rubygems'; require 'Qt') 现在应该可以工作了。

不需要额外的步骤,因为二进制 gem 仅针对 Windows 平台提供。因此,gem install qtbindings 步骤将需要几分钟时间,因为它会下载大型二进制文件,但它包含需要和运行 Qt 应用程序所需的所有必要部分。

支持在 Windows 上从源代码编译,并记录在项目的 README 文件中。

低谷

我给qtbindingsqtruby 的维护者发了电子邮件。这是完整的故事:

qtrubyKorundum project提供的一个包。 Korundum 为所有 KDE 提供 Ruby 绑定,而qtruby 只为 Qt 提供绑定。

qtbindings (github) 是 qtruby 的修改和重新打包版本,专门针对跨平台使用进行了优化。我将从这里的README 复制并粘贴“目标”部分:

目标

  1. 为了便于在所有平台上为 Ruby 安装 Qt 绑定 使用 RubyGems
  2. 维护一个最新的捆绑的 Windows 二进制 gem 来自http://qt.nokia.com的最新版Qt
  3. 将绑定的范围和维护减少到仅绑定到 Qt SDK 提供的库。
  4. 增加与非 Linux 平台的兼容性

尽管Korundum downloads page 确实 提供了其 gem 的 mswin32 版本,但在撰写本文时,它们还没有得到任何人的积极审查,因此不应依赖它们。 QtRuby 维护者告诉我,在 QtRuby 3 发布之前,RubyForge 页面可能不可靠。

回顾

现在(2011 年 10 月 3 日),不要在 Windows 上使用 qtruby gem。使用qtbindings

或许可以在其他平台上使用qtruby,在Windows 上使用qtbindings,但您可能会自找麻烦。如果您只使用 Qt 并且不关心 KDE 的其余部分,qtbindings 可能是一个安全的选择。

QtRuby 的维护人员正在计划在不久的将来进行一些方法更新(例如使用 git),因此两个项目之间可能会增加共享修复和更新。

【讨论】:

  • 优秀。很抱歉,赏金没有吸引其他人来帮助你,但这个总结很棒:结论、参考、支持 sn-ps,而且写得很好。谢谢!
  • 很棒的帖子。感谢您向我指出这一点。我参考您的帖子更新了我在 paschenda.org 上的教程。
猜你喜欢
  • 1970-01-01
  • 2011-09-17
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多