You need to enable JavaScript to run this app. 自行编译ruby-odbc经:path引用报incompatible library version,gem安装版正常
优惠活动
大模型
产品
解决方案
定价
更多

自行编译ruby-odbc经:path引用报incompatible library version,gem安装版正常

本地编译 ruby-odbc gem 触发版本不兼容问题

核心现象

  • 从源码自行编译 ruby-odbc gem,可成功生成 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 11:24:08