Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
打包Ruby C扩展_Ruby_Rubygems_Native Code - Fatal编程技术网

打包Ruby C扩展

打包Ruby C扩展,ruby,rubygems,native-code,Ruby,Rubygems,Native Code,我发现了一个关于如何打包Ruby C扩展的博客 根据博客的说法( ... )它说 具有本机C扩展的独立于平台的Ruby gems 仅添加C扩展名源文件:即.C和extconf.rb 只有文件。不需要Makefile和编译文件 将ext目录添加到所需路径 将平台保持为Ruby(独立) 注册包含的C扩展:这将告诉RubyGems 安装时有一个编译步骤。这是由 提供extconf.rb文件的所有路径 具有本机C扩展的平台相关Ruby gems 添加编译后的C扩展文件(与为 普通Ruby文件) 将e

我发现了一个关于如何打包Ruby C扩展的博客

根据博客的说法( ... )它说

  • 具有本机C扩展的独立于平台的Ruby gems

  • 仅添加C扩展名源文件:即.C和extconf.rb 只有文件。不需要Makefile和编译文件

  • 将ext目录添加到所需路径

  • 将平台保持为Ruby(独立)

  • 注册包含的C扩展:这将告诉RubyGems 安装时有一个编译步骤。这是由 提供extconf.rb文件的所有路径

  • 具有本机C扩展的平台相关Ruby gems

  • 添加编译后的C扩展文件(与为 普通Ruby文件)

  • 将ext目录添加到所需路径

  • 将平台设置为当前平台

我分析了罗兹宝石。 此gem包含本机扩展名(有一个用于 扩展,它有extconf.rb)

但是,在ext/文件夹下,没有C源代码。它只有 带有extconf.rb的makefile和共享库文件(so和dll)

这个gem是独立于平台的。根据档案,它说 默认为Ruby。这意味着它可以在任何Ruby平台上运行

如果是这种情况,这违反了规则1:添加C扩展 仅限源文件:即仅限.c和extconf.rb文件。不需要 与平台无关的Ruby gems的Makefile和编译文件 本机C扩展用例

这些规则是否始终适用于任何GEM文件

另外,你能解释一下“添加你编译的C扩展文件”吗 (与处理普通Ruby文件的方式完全相同)“

请帮帮我

这看起来像是跨平台的,所以这会使事情变得非常复杂。特定于plaftorm的代码存储在
platform
中,由platform分解

对于一个简单的gem,您是对的,内容应该在
ext/
中。在这种情况下,它看起来不够灵活


如果您查看
ext/
中的文件,会发现有很多疯狂的事情发生,这远远超出了制作C扩展gem时放在那里的默认存根。

此时,该页面已死亡。你最好的办法就是看看阿卡·丁德洛夫的博客

这里有一个链接:

这听起来就像你描述的那样,我会说这是正常的

bin
ext
lib
根据我的经验,最好在ext和lib文件夹中使用与要构建的gem扩展名相近的同名文件夹。是的,将extconf.rb和您的C文件放在ext'gem_ext_name'的子文件夹中。但是你可以把东西放在任何你想放的地方,只要耙子知道它们在哪里

我的构建通常在编译期间进入tmp文件夹,然后在构建共享对象时,它会从temp文件夹复制到lib文件夹,该文件夹在Rakefile中列出了要复制到的目录