JRuby изисква грешка на .so файл

Работя върху функция за приложение, което трябва да работи на JRuby. По навик разработвам на "Native" Ruby. Когато се опитам да стартирам методи от този клас в JRuby, получавам съобщения за грешка като:

MissingSourceFile: няма такъв файл за зареждане -- сериен порт

Мисля, че проблемът се крие в изискването "serialport.so". Има ли начин това да работи в JRuby? Има ли друг начин да изисквате .so файл? Или скъпоценен камък, който може да работи с JRuby, за да предостави клас SerialPort? Опитах да инсталирам ruby-serialport gem, но изглежда не се инсталира правилно (проблеми с 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