2012-05-31 8 views

Antwort

13

Auf meinem Rechner die anfängliche Lastpfad sieht wie folgt aus:

$ ruby -e 'puts $LOAD_PATH' 
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1 
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.8.0 
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby 
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby/1.9.1 
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.8.0 
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby 
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1 
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin10.8.0 

Bewaffnet mit grep, eine Untersuchung der Quelle Rubin führt zur definition of ruby_initial_load_paths[] in version.c (dies ist Ruby 1.9.3). Die ersten von diesen gelten (NO_INITIAL_LOAD_PATH oder RUBY_SEARCH_PATH wurden eingestellt) ist RUBY_SITE_LIB2. Mit Blick auf die oben definiert dieser Definition we see:

#define RUBY_SITE_LIB2    RUBY_SITE_LIB "/"RUBY_LIB_VERSION 

und in turn:

#define RUBY_SITE_LIB RUBY_LIB_PREFIX"/site_ruby" 

Im Anschluss an diese Kette definiert, wird klar, dass dies in meinem Lastpfad oben auf den ersten Eintrag entspricht. In ähnlicher Weise entsprechen die anderen Konstanten, die in diese Variable eingehen, den anderen Ladepfadeinträgen.

Die Variable ruby_initial_load_paths[] wird in ruby_init_loadpath_safe() in ruby.c verwendet, wobei der tatsächliche Lastpfad für den Prozess eingerichtet ist.

Die Antwort auf Ihre Frage ist also, dass der initiale Ladepfad zur Kompilierungszeit mit einigen #define s gesetzt wird, je nachdem, wie der Build konfiguriert wurde.

0

Ihre Zusammenstellung eines lib auf * nichts-basierten Systemen schafft es

/usr/lib/ruby/X.Y.Z 

X.Y.Z stellt Versionsnummer Ihres Rubin C api Version im Allgemeinen ist.

+0

Nein, die Versionsnummer steht für die Ruby C API-Version –

Verwandte Themen