如何修复 charlock_holmes gem 使其适用于 opensuse Tumbleweed?

Posted

技术标签:

【中文标题】如何修复 charlock_holmes gem 使其适用于 opensuse Tumbleweed?【英文标题】:How can I fix charlock_holmes gem so it works on opensuse Tumbleweed? 【发布时间】:2016-11-12 03:14:05 【问题描述】:

我可以在 opensuse 上安装 charlock_holmes gem,尝试在 irb 中快速打开它,我明白了:

> irb
2.3.0 :001 > require 'charlock_holmes'
LoadError: /home/wpostma/.rvm/gems/ruby-2.3.0/gems/charlock_holmes-0.7.3/lib/charlock_holmes/charlock_holmes.so: 
undefined symbol: _ZTIN6icu_538ByteSinkE - /home/wpostma/.rvm/gems/ruby-2.3.0/gems/charlock_holmes-0.7.3/lib/charlock_holmes/charlock_holmes.so
        from /home/wpostma/.rvm/rubies/ruby-2.3.0/lib64/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from /home/wpostma/.rvm/rubies/ruby-2.3.0/lib64/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from /home/wpostma/.rvm/gems/ruby-2.3.0/gems/charlock_holmes-0.7.3/lib/charlock_holmes.rb:1:in `<top (required)>'
        from /home/wpostma/.rvm/rubies/ruby-2.3.0/lib64/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `require'
        from /home/wpostma/.rvm/rubies/ruby-2.3.0/lib64/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `rescue in require'
        from /home/wpostma/.rvm/rubies/ruby-2.3.0/lib64/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in `require'
        from (irb):1
        from /home/wpostma/.rvm/rubies/ruby-2.3.0/bin/irb:11:in `<main>'
2.3.0 :002 > 

在我看来,charlock_holmes 中的某些内容可能与 tumbleweed 中的 libicu 版本不兼容。

我正在使用通过 rvm 安装的 ruby​​,并且清除我所有的 gemset 并重新安装并不能修复它。还有其他方法可以让 charlock_holmes 工作吗?也许我需要安装一个特殊的 libicu(较早、较旧)副本并将 gem 指向它?

【问题讨论】:

【参考方案1】:

这些作品中的任何一个。对我来说,捆绑配置选项效果更好。

这是安装 gem 的直接命令,将其指向正确的 libicu 版本:

gem install charlock_holmes -- --with-icu-dir=/usr/local

这是一个命令,用于告诉我稍后在该系统上安装的哪个 ruby​​ 项目,将让 bundler 安装的 gems 正常工作而不是破坏:

bundle config build.charlock_holmes "--with-icu-dir=/usr/local" --global

由于我使用的是rvm,因此上述捆绑配置似乎仅对该 rvm 环境是“全局的”。

在我的例子中,bundle 配置很有帮助,因为一系列原本会失败的操作(安装 gems,以及引导大型 rails 应用程序)刚刚起作用。

【讨论】:

以上是关于如何修复 charlock_holmes gem 使其适用于 opensuse Tumbleweed?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复此错误? config.gem:在 vendor/gems 中解压的 gem authlogic-2.1.3 没有规范文件

在gem依赖中处理错误修复的最佳方法是什么?

如何使用已在Github上发布但尚未在Rubygems上发布的gem版本?

未加载修复库:libmysqlclient.16.dylib(LoadError)

尝试加载 gem 'devise. ActiveSupport:持续时间不能强制转换为整数

修复不可读的 ghostscript 字体