Как я могу запустить Qt4 с ruby ​​1.9.2 в Windows 7? - PullRequest
24 голосов
/ 28 сентября 2011

Сводка

Я пишу приложение Ruby 1.9.2 с использованием Qt4 для графического интерфейса пользователя, которое я хочу распространять в Linux, OS X и Windows.У меня приложение работает нормально на всем, кроме 64-разрядной версии Windows 7.

Есть рабочие примеры Win7 + Qt4 + 1.8.7, но, видимо, не Win7 + Qt4 + 1.9.2.Для привязок Ruby-Qt есть два гема: qtbindings и qtruby4 (иногда их называют qt4-qtruby), но я пока не видел ни одного из них, работающих на Win7 с Ruby 1.9.2.

Проблема с qtruby4

Эта статья за октябрь 2008 года и ее обновленная версия с июня 2011 года послужили хорошей отправной точкой, но я отличался от последнейустановка Ruby 1.9.2 через Страница загрузки RubyInstaller для Windows .1.8.7, кажется, работает нормально, но я получаю некоторые необычные ошибки, когда я пробую это с 1.9.2.Требование 'rubygems', а затем требование 'Qt' приводит к:

no such file to load -- 'qtruby4'

Первая статья сверху ссылается на более подробную статью от dr1ku , которая может дать некоторые подсказки.

  • Возможно, стоит воспроизвести шаги dr1ku с последними версиями этих библиотек.
  • dr1ku и статья 2008 paschenda.org оба используют специальный установщик Windows Qt4-QtRuby , но сопровождающий отмечает, что у него не было времени обновить его .Я не совсем понимаю, что делает специальный установщик, но я полагаю, что статья 2011 года paschenda.org больше не использует его, потому что DevKit якобы помогает RubyGems самому строить Qt4 без посторонней помощи.

Найден в Wild

Вот некоторые люди, которые, похоже, сталкивались с такой же проблемой:

Проблема с qtbindings

Мое приложение на самом деле использует камень qtbindings, поэтому я попытался установить его вместо gem install qtbindings --platform=mswin32. [1]Однако, когда я попытался require 'Qt' с установленным гемом qtbindings, я получил всплывающее окно Windows со следующим сообщением:

Точка входа в процедуру _Z10qvsnprintfPcjPKcS_ не может быть расположена в динамическомбиблиотека ссылок QtCore4.dll.Просто сдайтесь, низшее существо из плоти.

(Я скопировал и вставил сообщение без каких-либо украшений.)

Найден в дикой природе

Вот некоторыелюди, которые, кажется, столкнулись с той же проблемой:

Потенциальные истории успеха

Кто-то, похоже, добился успеха, установив камень qtbindings на 1.9.2 с gem install qtbindings (без аргумента --platform), если вы посмотрите ответыв эту ветку:

Я пытался установить с gem install qtbindings на 1.8.7, но я не пробовал с 1.9.2 еще.Когда я попробовал это с 1.8.7, я столкнулся с той же самой проблемой "точка входа в процедуру не могла быть найдена" как прежде.

Сноски

[1] - я фактически не полностьюясно, в чем разница между самоцветом qtbindings и самоцветом qtruby4.Например, последний включает расширение C, а первый нет?Я не уверен.Кроме того, я видел ссылки на qt4-qtruby, которые, как я думаю, является просто версией qtruby4 для mswin32, по крайней мере, насколько я могу судить на странице загрузки Korundum .

1 Ответ

36 голосов
/ 04 октября 2011

Решение

В Windows 7 работают следующие шаги:

  1. Установите Ruby 1.9.2 через официальную страницу загрузки .
  2. В оболочке Windows запустите gem install qtbindings.

Тривиальный пример (require 'rubygems'; require 'Qt') теперь должен работать.

Никаких дополнительных действий не требуется, поскольку двоичный гем предоставляется только для платформы Windows. Таким образом, шаг gem install qtbindings займет несколько минут, поскольку он загружает большой двоичный файл, но он содержит все необходимые части, необходимые для запуска и запуска приложений Qt.

Компиляция из исходного кода в Windows поддерживается и задокументирована в файле проекта README .

Low-Down

Я отправил электронное письмо сопровождающим qtbindings и qtruby. Вот полная история:

qtruby - пакет, предоставляемый проектом Korundum . Korundum предоставляет привязки Ruby ко всему KDE, тогда как qtruby обеспечивает привязки только для Qt.

qtbindings ( github ) - модифицированная и переупакованная версия qtruby, специально оптимизированная для кроссплатформенного использования. Я скопирую и вставлю раздел «Цели» из README здесь:

Цель

  1. Чтобы упростить установку привязки Qt для Ruby на всех платформах используя RubyGems
  2. Для поддержки современного бинарного гема для Windows в комплекте с последней версией Qt от http://qt.nokia.com
  3. Чтобы уменьшить объем и содержание привязок, чтобы связать только библиотеки, предоставляемые Qt SDK.
  4. Для повышения совместимости с платформами не Linux

Хотя страница загрузок Korundum предоставляет версии mswin32 его драгоценного камня, на момент написания этой статьи они никем не подвергались активной проверке, поэтому на них не следует полагаться. Сопровождающий QtRuby сообщил мне, что страница RubyForge, вероятно, не будет надежной, пока не будет выпущена версия QtRuby 3.

Резюме

Прямо сейчас (03.10.2011) не используйте камень qtruby в Windows. Используйте qtbindings.

Вы , возможно, сможете использовать qtruby на других платформах и qtbindings на Windows, но, вероятно, у вас возникнут проблемы. Если вы просто идете на Qt и не заботитесь об остальной части KDE, qtbindings, вероятно, безопасная ставка.

Сопровождающие QtRuby планируют некоторые обновления методологии в ближайшем будущем (например, с помощью git), поэтому между этими двумя проектами может быть больше общих исправлений и обновлений.

...