我碰巧在一个沙盒的Ruby环境中工作,并一直在努力库添加到它,结果好坏参半。然而,它已经提出了关于Ruby是如何工作的一些有趣的问题。我看明白了红宝石如何链接库,以及它如何决定在启动时如何加载。

这是怎么回事,当我做一个

require 'someLib/someClass'

我需要.RB文件之前,但行为与库不同。 如何做一个需要工作,如果它看起来像它需要像一个目录

require 'DL'

它是如何知道哪些文件来加载以及如何被那名“DL”在解释注册?

P.S。:红宝石的唯一露出部我与现在的工作是“的msvcrt-ruby18.dll”

有帮助吗?

解决方案

require 'something'红宝石搜索名为要么something.rbsomething.dll/so/bundle根据您的平台的文件。

在的情况下它发现它动态加载它,并搜索一个称为dll/so/bundle符号库Init_something。创建原生扩展时的惯例是包括被使用由红宝石解释挂钩东西这样的功能。

其中(其中目录)的intrepeter查找RB文件和库是由负载路径,这可以追加使用解释器的-I选项确定。在运行时,电流负载路径是在$:(可以追加在运行时进一步目录到这个以及),例如:

$ irb
irb(main):001:0> puts $:
/opt/local/lib/ruby/site_ruby/1.8
/opt/local/lib/ruby/site_ruby/1.8/i686-darwin9
/opt/local/lib/ruby/site_ruby
/opt/local/lib/ruby/vendor_ruby/1.8
/opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin9
/opt/local/lib/ruby/vendor_ruby
/opt/local/lib/ruby/1.8
/opt/local/lib/ruby/1.8/i686-darwin9
.

看看需要( HTTP的文档: //ruby-doc.org/core-1.8.7/classes/Kernel.html#M001077

我不知道用你的意思:

  

P.S。红宝石我的唯一露出的部分   现在所拥有的是与工作   'MSVCRT-ruby18.dll'

另外你提到一些有关沙盒。这可能与您需要的模块的能力。搜索$安全的,如果$ SAFE设置为> 2,你将无法使用require的。

其他提示

红宝石使用内置于全球,$:(美元冒号)是一个字符串数组,指定该组由loadrequire使用的目录。

require 'DL',红宝石将搜索$:,这(我的机器上至少和我期望通常无处不在)包括"c:/ruby/lib/ruby/1.8/i386-mswin32",这就是(红宝石安装在c:/ruby这台电脑上),我发现dl.so,编译库包含DL功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top