0

問題に完全に関連しなくなったため、元の質問を一番下に移動しました。

次のように要求できる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/にあります)

何か案は?ありがとう。

4

1 に答える 1

0

$LOAD_PATH中から見て、irbシリアルポートに関連するものを探し始めました。

やがて、私は見つけまし~/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/i686-darwin10.6.0/serialport.bundleた。それを削除した後、私は以前にこの問題をデバッグするためにシリアルポートgemをアンインストールしたのでrequire 'serialport'、期待どおりに試しました。LoadError: no such file to load -- serialport

その後gem install serialport、私のコードは期待どおりに再び機能します。

私がはっきりと考えていたら、そもそもこれを行い、頭痛を避けていただろう。これが、同様の問題を抱えている人がより迅速にデバッグするのに役立つことを願っています。

于 2011-02-14T16:30:00.647 に答える