我正在为必须在JRuby上运行的应用程序开发一个功能。出于习惯,我开发了'Native'Ruby。当我尝试在JRuby中运行此类中的任何方法时,我收到错误消息,如:
MissingSourceFile:没有要加载的文件 - serialport
我认为问题在于'requireport.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 :(得分:0)
据我所知,JRuby不提供任何本机仿真层,只提供Java中的Ruby解释器。问题是“.so”文件是特定于UNIX的,如果没有某种仿真/翻译,则无法在Windows上运行。
如果你打算使用JRuby,最好避免使用需要原生扩展的Ruby库。