Gem gem so 文件为什么要单独在放一个目录?

windwiny · 2014年05月24日 · 最后由 windwiny 回复于 2014年05月25日 · 2438 次阅读

rubygem 的目录 lib/ruby/gems/2.0.0/cache 下面有这些目录 cachedocgemsspecificationsextensions 前面 4 个目录存放的文件用途都很清楚,最后一个目录 extensions 又单独放一份编译过的 so 文件,为什么要这么设计?


PS: 调试一个 so 文件,在安装好的 gems/xxx/ext 下改了源码重新编译生成 so 文件,复制到 gems/xxx/lib,一直加载的是旧版本 so,真的是被这个设计蠢晕了。而且去把 extensions 目录下的重复 gem 的目录删除后,下次启动程序的时候它 (rubygems) 又会去重新编译一次,这完全没有必要的啊?在 gems/xxx/lib 下就有 so 文件存在了。

大哥 cache 目录很明显不是你的目的地。。。。。这个是临时目录。。。。。

貌似我理解错了。。。

看来大家都忙着做正事,没空研究这些边边角角的东西~

我自己很闲,去 github 上问吧~

我有关注,不发言不代表没人看。。。楼主问出结果记得填坑。 。。

有答案了 https://github.com/rubygems/rubygems/issues/926#issuecomment-44114814

说是为了在不同平台共享 gem 目录。二进制文件单独放在一个平台相关目录下,其它 rb 文件可以共享。

PS: 还发现一个问题,删除了 extensions 目录下的文件,但在 ext 下能找到已编译好的 so 文件,rubygem 还是要自己重新编译一下 so,而不是直接把已有的文件复制到 extentions 目录。

另外,如果两边 so 文件日期不一样,rubygem 也不会再自动复制了,要在 rubygem 目录下改 C 源代码调试 so 文件,只有自己注意点了~,记着编译后把 so 复制过去。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号