問題に完全に関連しなくなったため、元の質問を一番下に移動しました。
次のように要求できるserialport.soを見つけることができません。
$ rvmree@global
$ irb
> require 'serialport.so'
=> true
(gemリストはemtpyを返します)
アップデート:
require 'serialport'
irbセッションで実行すると、gemをアンインストールしても両方ともtrueを返す必要があります。したがって、「require'serialport'」を介して別のgemが必要になっているようです。私は自分のシステムでこの宝石の他のバージョンを検索しましたが、結果はありませんでした。
正しい宝石が必要であることをどのように確認できますか?
アップデート:
[宝石のリストを削除]
rvmグローバル名前空間のすべてのgemをアンインストールしても、「シリアルポート」が必要で、trueになる可能性があります。
これで、gemリストの出力は完全に空になり、require'serialport'はirb内からtrueを返します。
私はrvmを使用しており、グローバルgemを空にし、使用しているgemset内のすべてのgemを空にしました。「serialport」を含む名前のシステムgemはありません。私は、serialport.o、serialport.soなどのgemディレクトリに含まれるファイルを検索しましたが、何も見つかりませんでした。
「シリアルポート」を要求するために応答している可能性があるものについて私は途方に暮れています
require 'serialport.so'
また、trueと
sudo find / -name 'serialport.so' -print
何も返しません。
何か案は?
元の投稿:
シリアルポート(1.0.4)のgemを使用しています。
ドキュメントはhttp://rubydoc.info/gems/serialport/1.0.4/にあります
これが私のimplementation.rbです:
require 'rubygems'
require 'serialport'
port_str = "/dev/cu.usbserial" # Serialport mount point
baud_rate = 9600
data_bits = 8
stop_bits = 1
parity = 0
sp = SerialPort.new(port_str, data_bits, stop_bits, baud_rate, parity)
while barcode = sp.gets do
puts barcode
end
sp.close
rubyimplementation.rbを実行すると次のようになります。
implementation.rb:14:in `initialize': wrong number of arguments (5 for 2) (ArgumentError)
from implementation.rb:14:in `open'
from implementation.rb:14
初期化メソッドがどこにも存在しないように見えるので、これは奇妙です(おそらく、rubyは内部的にSerialPort :: newを初期化として命名していますか?)。
宝石のルビー部分は次のようになります。
require 'serialport.so'
class SerialPort
private_class_method(:create)
# Creates a serial port object.
#
# <tt>port</tt> may be a port number
# or the file name of a defice.
# The number is portable; so 0 is mapped to "COM1" on Windows,
# "/dev/ttyS0" on Linux, "/dev/cuaa0" on Mac OS X, etc.
#
# <tt>params</tt> can be used to configure the serial port.
# See SerialPort#set_modem_params for details
def SerialPort::new(port, *params)
sp = create(port)
begin
sp.set_modem_params(*params) # Calls C extension
rescue
sp.close
raise
end
return sp
end
# SerialPort::open removed as its the same thing as new() with a block
end
これは先日機能していたので、何が変わるかは考えられません。
また、ruby-serialport gem(0.7.0)でも同じエラーが発生します。これは、両方のソースを一目見ただけではまったく同じように見えます。
サンプルの実装はhttp://www.sfc.wide.ad.jp/~mitsuya/4U/ruby-serialport-macosx.htmlにあります。
後者の宝石(ruby-serialport)はhttp://rubyforge.org/projects/ruby-serialport/にあります(ドキュメントはhttp://ruby-serialport.rubyforge.org/にあります)
何か案は?ありがとう。