概述
我正在编写一个使用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绑定有两个gems:qtbindings
和qtruby4
(有时称为qt4-qtruby
),但我还没有看到它们中的任何一个在Win7上与Ruby 1.9.2一起运行。
qtruby4
存在的问题
这篇来自2008年10月的文章及其更新版本来自2011年6月是很好的起点,但我与后者不同之处在于通过RubyInstaller for Windows'下载页面安装了Ruby 1.9.2。1.8.7似乎可以正常工作,但当我尝试将其与1.9.2一起使用时,会出现一些异常错误。调用'rubygems'
然后调用'Qt'
的结果如下:
no such file to load -- 'qtruby4'
上面的第一篇文章链接到dr1ku的更深入的文章,可能会提供一些线索。
- 值得一试的是,使用这些库的最新版本来重现dr1ku的步骤。
- dr1ku和2008年的paschenda.org文章都使用了一个特殊的Windows Qt4-QtRuby安装程序,但维护者指出他没有时间更新它。我不完全清楚特殊安装程序的作用,但我想paschenda.org的2011年文章不再使用它,因为DevKit显然帮助RubyGems自己构建Qt4而无需帮助。
在野外发现
以下是一些看起来遇到了相同问题的人:
- 在Windows平台上没有qtruby库
- Ruby 1.9.x + Qt4Ruby….是一个白日梦吗???
- 在ruby 1.9.1/win32 上加载qtruby4时出现LoadError for qtruby4-2.1.0
qtbindings
的问题
我的应用实际上使用qtbindings
gem,因此我尝试安装它,使用gem install qtbindings --platform=mswin32
。[1] 然而,当我安装了qtbindings
gem并尝试使用require 'Qt'
时,我得到了一个Windows弹窗,显示以下消息:
在动态链接库QtCore4.dll中找不到过程入口点
_Z10qvsnprintfPcjPKcS_
。放弃吧,低劣的血肉生物。
(我没有加任何修饰地复制并粘贴了该消息。)
实践中发现
这里有一些遇到相同问题的人:
可能的成功案例
似乎有人已经成功地在1.9.2上安装了qtbindings
gem,使用gem install qtbindings
(没有--platform
参数),如果您查看此线程的回复:
我尝试在1.8.7上使用gem install qtbindings
进行安装,但我还没有尝试过1.9.2。当我在1.8.7上尝试时,我遇到了与以前相同的“找不到过程入口点”的问题。
脚注
[1] - 我其实不是很清楚qtbindings
gem和qtruby4
gem之间的区别。例如,后者是否包含C扩展而前者不包含?我不确定。此外,我看到过关于qt4-qtruby
的参考资料,我认为它只是qtruby4
的mswin32版本,至少从Korundum下载页面上来看是这样的。
require 'Qt'
时,问题就会出现,因此即使是一个4行的示例也会过度。这是你在文件中看到该问题所需的全部内容:require 'rubygems'; require 'Qt'
。 - Max CantorMSVCRT.DLL
用于运行时C库,也许它没有与1.9.2 Ruby安装一起安装? - sarnoldvsnprintf
混淆函数。所有涉及的库在ldd
输出中是什么样子的? - sarnoldldd
工作 - 我不知道Windows本地的等效物,抱歉,但肯定有一些可以报告对象文件要求并报告哪些是不满足的。 - sarnold