自行编译ruby-odbc经:path引用报incompatible library version,gem安装版正常
本地编译 ruby-odbc gem 触发版本不兼容问题
核心现象
- 从源码自行编译
ruby-odbcgem,可成功生成odbc.so与odbc_utf8.so动态库文件; - 在Gemfile中通过
:path参数引入这份本地编译的gem时,运行会抛出incompatible library version错误; - 同版本的gem如果通过bundler、
gem install流程正规安装,运行完全正常。
已开展的排查过程
- 第一轮排查对比了两种编译流程生成的Makefile,仅发现
sitearchdir与sitelibdir配置存在差异:- 自行编译场景下的配置:
sitearchdir = $(sitelibdir)/$(sitearch) sitelibdir = $(sitedir)/$(ruby_version) - gem/bundler 自动编译场景下的配置:
sitearchdir = $(DESTDIR)./.gem.20210204-9736-1i20v5m sitelibdir = $(DESTDIR)./.gem.20210204-9736-1i20v5m
- 自行编译场景下的配置:
- 最初猜测问题和WSL环境相关:测试环境为WSL下的Ubuntu 18.04,使用rbenv管理的Ruby 2.6.5,通过
rake compile执行编译,按照官方文档手动执行全流程编译步骤,结果完全一致。当时怀疑是WSL环境下需要手动指定编译架构,而bundler、gem install 流程自动完成了这步配置。 - 跨环境验证排除WSL影响:在Ubuntu 19.04实体虚拟机上复现了完全相同的报错,确认问题和WSL环境无关联。
- 排除Makefile配置差异的影响:执行
gem install ruby-odbc -V输出完整编译日志,未发现其编译流程和自行编译的步骤有明显区别;甚至将gem install 过程中生成的Makefile拷贝到本地源码目录,直接使用该Makefile执行编译,依然触发相同报错,说明之前观察到的目录配置差异大概率不是问题根源。
内容的提问来源于stack exchange,提问作者ioev
相关产品推荐
相关产品推荐

