2010-12-17 33 views
0

我正在研究必须在JRuby上运行的应用程序的功能。出于习惯,我在'本地'Ruby开发。当我尝试从这个类在JRuby中的任何方法,我得到错误信息,如:JRuby需要.so文件上的错误

MissingSourceFile:没有这样的文件来加载 - 的SerialPort

我认为问题出在需要“ serialport.so”。有没有办法在JRuby中完成这项工作?有另一种方法需要.so文件吗?还是可以与JRuby一起使用以提供SerialPort类的gem?我尝试安装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 
+0

你不能使用本地Java方法来访问串口? – 2010-12-17 21:33:55

回答

0

据我所知,JRuby中不提供任何本地模拟层,只是Ruby解释器Java编写的。问题在于“.so”文件是UNIX特有的,如果没有某种模拟/转换,就无法在Windows上运行。

如果您要使用JRuby,最好避免需要本机扩展的Ruby库。