cygwinでgem updateに失敗する(1)
こんばんは。
最底辺です。
久々にIT関係記事です。
rubyでも勉強してみようかとcygwinにruby入れたんですが、
なんかgemってやつのupdateが上手くいかないようです。
(なんでcygwinに入れたってツッコミはなしで。。。)
$ gem update ERROR: While executing gem ... (ArgumentError) invalid byte sequence in UTF-8
う~ん。これは、困った。とりあえず、ググるか。
http://chiranoura.nobody.jp/articles/2014-10-06_01_fix_rubygem/
この辺りの情報かな?
なんか、win32\registry.rbとかいうのが怪しいらしい。
という言うことで、リンク先の更にリンクにあった以下を参考に修正してみました。
$ diff -u registry.rb 'C:\cygwin64\usr\share\ruby\2.0.0\win32\registry.rb'
--- registry.rb 2014-09-04 20:54:39.138646900 +0200
+++ "C:\\cygwin64\\usr\\share\\ruby\\2.0.0\\win32\\registry.rb" 2014-09-04 20:54:44.109928700 +0200
@@ -62,6 +62,9 @@
For detail, see the MSDN[http://msdn.microsoft.com/library/en-us/sysinfo/base/predefined_keys.asp] article.
=end rdoc
+ WCHAR = Encoding::UTF_16LE
+ WCHAR_SPACE = "\0".encode(WCHAR).freeze
+ LOCALE = Encoding.find(Encoding.locale_charmap)
class Registry
@@ -164,12 +167,12 @@
extend Fiddle::Importer
dlload "kernel32.dll"
end
- FormatMessageA = Kernel32.extern "int FormatMessageA(int, void *, int, int, void *, int, void *)", :stdcall
+ FormatMessageW = Kernel32.extern "int FormatMessageW(int, void *, int, int, void *, int, void *)", :stdcall
def initialize(code)
@code = code
- msg = "\0".force_encoding(Encoding::ASCII_8BIT) * 1024
- len = FormatMessageA.call(0x1200, 0, code, 0, msg, 1024, 0)
- msg = msg[0, len].force_encoding(Encoding.find(Encoding.locale_charmap))
+ msg = WCHAR_SPACE * 1024
+ len = FormatMessageW.call(0x1200, 0, code, 0, msg, 1024, 0)
+ msg = msg[0, len].encode(LOCALE)
super msg.tr("\r", '').chomp
end
attr_reader :code
実は、ここまで約2時間!! さすが最底辺。
$ gem update
...
Building native extensions. This could take a while...
ERROR: Error installing json:
ERROR: Failed to build gem native extension.
/usr/bin/ruby.exe -r ./siteconf20150515-1396-8b5m10.rb extconf.rb
creating Makefile
make "DESTDIR=" clean
rm -f
rm -f generator.so *.o *.bak mkmf.log .*.time
make "DESTDIR="
gcc -I. -I/usr/include/ruby-2.0.0 -I/usr/include/ruby-2.0.0/ruby/backward -I/usr/include/ruby-2.0.0 -I. -DJSON_GENERATOR -ggdb -O2 -pipe -Wimplicit-function-declaration -o generator.o -c generator.c
rm -f generator.so
gcc -shared -o generator.so generator.o -L. -L/usr/lib -L. -fstack-protector -Wl,--export-all-symbols -Wl,--enable-auto-image-base,--enable-auto-import -lruby200 -lpthread -lrt -ldl -lcrypt
/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../x86_64-pc-cygwin/bin/ld: -lcrypt が見つかりません
collect2: エラー: ld はステータス 1 で終了しました
お、さっきのエラーはなくなったようだけど、なんかまだ怪しいな!!(続く。。。)
ディスカッション
コメント一覧
まだ、コメントがありません