2010-12-17 9 views
0

Ich arbeite an einer Funktion für eine Anwendung, die auf JRuby ausgeführt werden muss. Aus Gewohnheit entwickle ich "Native" Ruby. Wenn ich versuche, alle Methoden aus dieser Klasse in JRuby zu laufen bekomme ich Fehlermeldungen wie:JRuby erfordern Fehler auf .so Datei

MissingSourceFile: keine solche Datei zu laden - Serialport

Ich denke, das Problem liegt in in der require ' serialport.so '. Gibt es eine Möglichkeit, dies in JRuby zu ermöglichen? Gibt es eine andere Möglichkeit, eine .so-Datei zu benötigen? Oder ein Juwel, das mit JRuby zusammenarbeiten kann, um die SerialPort-Klasse bereitzustellen? Ich habe versucht, das Ruby-Serialport-Juwel zu installieren, aber das scheint nicht richtig zu installieren (Windows nmake-Probleme).

Hier ist, was meine Klassendatei wie folgt aussieht:

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 
+0

Sie können die systemeigenen Java-Methoden nicht für den Zugriff auf die serielle Schnittstelle verwenden? –

Antwort

0

Soweit ich weiß, JRuby bietet keine nativen Emulationsschicht, sondern nur die Ruby-Interpreter in Java. Das Problem ist, dass ".so" -Dateien UNIX-spezifisch sind und unter Windows ohne irgendeine Art von Emulation/Übersetzung nicht laufen können.

Sie vermeiden Ruby-Bibliotheken, die native Erweiterungen benötigen, wenn Sie JRuby verwenden.