之所以鼓足勇气,我感觉这个东西写出来,会觉得自己很无知。而且本人不像主席那样爱打字。。而且思维很乱,而且本坛子有很多高人,心里压力很大
基于的 git 版本为:
commit 6da92c3e89697e1263248ab56e2ad33381429d6c
Author: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
Date: Thu Mar 29 07:38:14 2012 +0000
* lib/rdoc/task.rb: suppress overriding deprecated class warning.
不看不知道,一看下一跳,一般来说,很少用 FSF 的 automake 的,而 matz 的 ruby,用了 autoconf, 动态生成 makefile,一搜 autoconf, autoconf 的帮助..1000 多页,所以我就放弃研究这块了,不过要是玩纯正的 linux,这东西躲不掉。不得不佩服 matz 了。。
后来想把 ruby 搞到自定义的目录,研究了一下 make install 的代码。没研究明白。不过大致是这样:先生成 miniruby,这个程序负责执行 tools/rbinstall.rb, -> rbconfig.rb (这个会把环境变量搞到 ruby 环境,具体怎么搞的,没细研究)
所以如果你想调试 ruby。在 Makefile 里修改:CC = gcc -g (用 gdb 调试) 执行 DESTDIR="./rubybin" make install (装到./rubybin 目录,而不是默认的/usr/local)
-_-# ruby 启动时,如何引用 rubygem 的?原来在 ruby 启动时,要自动执行一些 ruby 命令。。。见`prelude.c,一共有 3 个,前面两个没细看
static const char prelude_name2[] = "<internal:gem_prelude>";
static const char prelude_code2[] =
"require 'rubygems.rb' if defined?(Gem)\n"
(gdb) bt
#0 Init_prelude () at prelude.c:81
#1 0x800cc4a4 in ruby_init_prelude () at ruby.c:1097
#2 process_options (argc=0, argv=0xbffff438, opt=0xbffff1f8) at ruby.c:1360
#3 0x800cd503 in ruby_process_options (argc=1, argv=0xbffff434) at ruby.c:1816
#4 0x8001951a in ruby_options (argc=1, argv=0xbffff434) at eval.c:73
#5 0x80016930 in main (argc=1, argv=0xbffff434) at main.c:38
**但是,还是提示
➜ bin git:(trunk) ✗ ./ruby
<internal:gem_prelude>:1:in `require': cannot load such file -- rubygems.rb (LoadError)
from <internal:gem_prelude>:1:in `<compiled>'