JRuby требует ошибки в файле .so

Я работаю над функцией приложения, которое должно работать на JRuby. По привычке я разрабатываю на «родном» Ruby. Когда я пытаюсь запустить какие-либо методы из этого класса в JRuby, я получаю сообщения об ошибках, например:

MissingSourceFile: нет такого файла для загрузки -- серийный порт

Я думаю, что проблема заключается в требовании «serialport.so». Есть ли способ заставить это работать в JRuby? Есть ли другой способ потребовать файл .so? Или гем, который может работать с JRuby для предоставления класса SerialPort? Я попытался установить гем ruby-serialport, но, похоже, он не устанавливается должным образом (проблемы Windows nmake).

Вот как выглядит мой файл класса:

require 'serialport.so'
class AlphaDisplay

  #STATES
  SOLID = "b"
  ROTATE = "a"
  BLINK = "c"
  #COLORS
  RED = "1"
  GREEN = "2"
  YELLOW = "3"
  ORANGE = "7"

  def self.message(address = 00, text = "ICS", color = AlphaDisplay::GREEN, state = AlphaDisplay::SOLID)
    address = address.to_s
    if address.length == 1
      address = "0#{address}"
    end
    string = 1.chr + 90.chr + address + 2.chr + 65.chr + 65.chr + 27.chr + 26.chr + state + 28.chr + color + text + 4.chr
    return string
  end
  def self.test(address = 00, text = "ICS", color = AlphaDisplay::GREEN, state = AlphaDisplay::SOLID)
    sp = SerialPort.new(0, 9600, 8, 1, SerialPort::NONE)
    sp.write(message(address,text,color,state))
    sp.close
  end   
end

def SerialPort::new(port, *params)
  sp = create(port)
  begin
    sp.set_modem_params(*params)
  rescue
    sp.close
    raise
  end
  return sp
end

def SerialPort::open(port, *params)
  sp = create(port)
  begin
    sp.set_modem_params(*params)
    if (block_given?)
      yield sp
      sp.close
      return nil
    end
  rescue
    sp.close
    raise
  end
  return sp
end

person naveed    schedule 17.12.2010    source источник
comment
Вы не можете использовать собственные методы Java для доступа к последовательному порту?   -  person Ignacio Vazquez-Abrams    schedule 18.12.2010


Ответы (1)


Насколько я знаю, JRuby не предоставляет никакого собственного уровня эмуляции, только интерпретатор Ruby в Java. Проблема в том, что файлы ".so" специфичны для UNIX и не могут работать в Windows без какой-либо эмуляции/перевода.

Вам лучше избегать библиотек Ruby, которые требуют собственных расширений, если вы собираетесь использовать JRuby.

person maerics    schedule 17.12.2010