如何解决构建 ruby 扩展与 gem install 时出现“不兼容的库版本”
我正在尝试从源代码构建 ruby-odbc gem 以调试问题。我可以成功编译 odbc.so 和 odbc_utf8.so,但是当我通过 :path 在我的 Gemfile 中包含 gem 时,我得到“不兼容的库版本”。如果我通过 bundler 或“gem install”安装完全相同的 gem,它就可以正常工作。
我比较了两个来源的生成 Makefile,唯一的区别是“sitearchdir”和“sitelibdir”略有不同:
自己编译:
sitearchdir = $(sitelibdir)/$(sitearch)
sitelibdir = $(sitedir)/$(ruby_version)
由 gem/bundler 编译:
sitearchdir = $(DESTDIR)./.gem.20210204-9736-1i20v5m
sitelibdir = $(DESTDIR)./.gem.20210204-9736-1i20v5m
我正在通过“rake compile”在 Windows Linux 子系统 Ubuntu 18.04 上使用 ruby 2.6.5 和 rbenv 进行构建,但我也根据文档手动构建了它,结果相同。我有点猜测我在 WLS 中,我需要以某种方式手动指定架构,这可能是捆绑程序/“gem install”在做什么?
编辑:我已经在 Ubuntu 19.04 VM 中尝试了相同的场景并得到相同的结果,因此它毕竟与 WLS 无关。
编辑:运行 gem install ruby-odbc -V
为我提供了关于 gem 如何编译的更详细的输出,但我没有看到与编译它的方式有什么不同。我还抓取了作为 gem install ruby-odbc
一部分创建的 Makefile 并将它们复制到我的本地版本的 gem 中,用它们编译会给我同样的错误,所以也许 makefile 中的细微变化也不是问题。
解决方法
事实证明我使用的是不同版本的 ruby。我使用 rbenv 并在项目中添加了一个 .ruby-version 文件,其中包含我认为正在编译的项目中使用的版本,但我想我一定是从我拥有的其他项目之一中获得了该版本打开。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。