2010-12-17 77 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庫。