Posted at

Cygwin上のrubyで共有ライブラリロードエラー

More than 1 year has passed since last update.


現象

ruby(2.3.3) 上 itamae を実行していて以下のエラーが発生するようになった。

$ itamae ssh ...

/c/Users/xxx/.rbenv/versions/2.3.3/lib/ruby/2.3.0/fiddle/import.rb:86:in `rescue in block in dlload': can't load user32 (Fiddle::DLError)
from /c/Users/xxx/.rbenv/versions/2.3.3/lib/ruby/2.3.0/fiddle/import.rb:83:in `block in dlload'
from /c/Users/xxx/.rbenv/versions/2.3.3/lib/ruby/2.3.0/fiddle
...


対応

回避策として、2つのファイルを修正した。

本来なら dlload の中身を直した方が良さそうだけど、取りあえず。

Ruby 2.4.0ではこの部分が修正されているので必要ないらしい(情報源)。


  • ~/.rbenv/versions/2.3.3/lib/ruby/2.3.0/win32/resolv.rb

  • ~/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/net-ssh-4.0.1/lib/net/ssh/authentication/pageant.rb


resolv.rb



~/.rbenv/versions/2.3.3/lib/ruby/2.3.0/win32/resolv.rb

module Kernel32

extend Importer
dlload "kernel32"
end



~/.rbenv/versions/2.3.3/lib/ruby/2.3.0/win32/resolv.rb

module Kernel32

extend Importer
dlload "kernel32.dll"
end


pageant.rb



~/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/net-ssh-4.0.1/lib/net/ssh/authentication/pageant.rb

        dlload 'user32.dll'

dlload 'kernel32.dll'
dlload 'advapi32.dll'
...
dlload 'user32.dll','kernel32.dll', 'advapi32.dll'



~/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/net-ssh-4.0.1/lib/net/ssh/authentication/pageant.rb

        dlload 'user32.dll'

dlload 'kernel32.dll'
dlload 'advapi32.dll'
...
dlload 'user32.dll','kernel32.dll', 'advapi32.dll'


参考