Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > ruby-serialport


Автор: freeneutron 19.7.2011, 11:04
Установил Ruby под ХР, разобрался с гемами, установил SciTE. Из последнего запускаю команду:
Код
 ruby D:/Ruby192/bin/gem install fxruby

получаю:
Код
 Successfully installed fxruby-1.6.20-x86-mingw32

потом, запускаю команду:
Код
 ruby D:/Ruby192/bin/gem install ruby-serialport

получаю:
Код
ERROR:  Error installing ruby-serialport:
    ERROR: Failed to build gem native extension.

        d:/Ruby192/bin/ruby.exe extconf.rb


Gem files will remain installed in d:/Ruby192/lib/ruby/gems/1.9.1/gems/ruby-serialport-0.7.0 for inspection.
Results logged to d:/Ruby192/lib/ruby/gems/1.9.1/gems/ruby-serialport-0.7.0/ext/gem_make.out
Building native extensions.  This could take a while...

Точно такая же ошибка возникает при установке ruby-usb и ribusb. Подскажите, пожалуйста, в чем проблема?

Автор: source777 21.7.2011, 19:08
Есть gem-пакеты, которые работают через native extensions, т.е. через системные библиотеки .so или .dll. Для установки таких gem-пакетов нужны соответствующие заголовочные файлы.

Автор: enRai 22.7.2011, 23:34
руби в виндоус? как вы его там вообще запустили?
(сарказм)

Автор: freeneutron 23.7.2011, 10:31
Цитата(enRai @ 22.7.2011,  23:34)
руби в виндоус? как вы его там вообще запустили?
(сарказм)

Да, Виндовс + заглюченная командная строка. Тем не менее, кое-что работает.

Цитата(source777 @ 21.7.2011,  19:08)
Есть gem-пакеты, которые работают через native extensions, т.е. через системные библиотеки .so или .dll. Для установки таких gem-пакетов нужны соответствующие заголовочные файлы.

С данной проблемой я разобрался. Нужен был devkit и рабочий интерпретатор bat-файлов. Но как-то мало в сети информации на русском о native extensions. И совсем не понятно, брать ответы на такие вопросы как:
Какие еще типы расширений используются в Ruby-сообществе?
Как обстоят дела с переносом расширений на другую платформу?

Автор: source777 23.7.2011, 12:24
Цитата(freeneutron @  23.7.2011,  10:31 Найти цитируемый пост)
Но как-то мало в сети информации на русском о native extensions

А что именно интересует то? Чтобы их устанавливать никакой особой информации не нужно или ты сам собрался такие gem-пакеты писать?


Цитата(freeneutron @  23.7.2011,  10:31 Найти цитируемый пост)
Какие еще типы расширений используются в Ruby-сообществе?

Не понял вопроса... Практически для любого, а особенно ярко это заметно для интерпретируемых, языка программирования есть 2 типа библиотек: pure название_языка и with native extensions. Первые пишутся исключительно на самом языке. А вторые используют системные библиотеки, чаще всего сишные.


Цитата(freeneutron @  23.7.2011,  10:31 Найти цитируемый пост)
Как обстоят дела с переносом расширений на другую платформу?

pure-ruby gems работают везде, где работает ruby.
gems with native extensions работают везде, где работает ruby и используемые нативные библиотеки.

Автор: freeneutron 26.7.2011, 17:13
Проблема с предидущей ошибкой вылечилась путем установки второй винды, так как в старой bat-файлы у меня по непонятной причине уже давно не запускаются.
Из всех гемов, предназначенных для работы с сериалпортом, у меня установился только serialport. И вот чего мне удалось от этого гема получить. 
Во-первых, я пытаюсь использовать http://snippets.dzone.com/posts/show/3647. В нем я поправил значения констант SMSC и destination_number, заменил 
p = GSM.new(:debug => false) на
p = GSM.new(:debug => false, :port => 'COM1')
Потом запустил скрипт, а он повис. Висел до тех пор, пока я не нажал Ctrl+Break. Продолжив эксперименты, я выяснил, что повисание начинается со строки:
    cmd("AT")
Если перед этой строкой я ставлю return, то повисание проходит, а скрипт, естественно, ни чего не делает.
Почему я использовал :port => 'COM1'?
user posted image
Здесь видно, что этот порт используется системой. Так же видно, что системой используются порты COM20, COM21 и COM22. Когда я использую COM20, COM21 или COM22 вместо COM1, то скрипт заканчивается ошибкой такого плана:
serialport.rb:16:in `create': Invalid argument - \\.\COM20 (Errno::EINVAL)
Когда я использую имя свободного порта, например COM19, то ошибка такая:
serialport.rb:16:in `create': No such file or directory - \\.\COM19 (Errno::ENOENT)
В общем очередной тупик, как выходить из которого, я пока что понятия не имею.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)