How to fix the ERROR: Failed to build gem native extension in Centos 8

本文记录了在尝试安装mongo gem时遇到的问题及解决过程。由于缺少必要的ruby-devel包导致安装失败,通过安装该依赖包后成功安装了mongo gem。

[root@DBAMAXWELL ~]# gem install mongo
Building native extensions. This could take a while...
ERROR:  Error installing mongo:
        ERROR: Failed to build gem native extension.

    current directory: /usr/local/share/gems/gems/bson-4.14.1/ext/bson
/usr/bin/ruby -r ./siteconf20220325-427526-vfnj46.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/share/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /usr/local/share/gems/gems/bson-4.14.1 for inspection.
Results logged to /usr/local/lib64/gems/ruby/bson-4.14.1/gem_make.out

Solution

[root@DBAMAXWELL ~]# yum install ruby-devel
Last metadata expiration check: 1:48:48 ago on Fri 25 Mar 2022 05:54:43 PM CST.
Dependencies resolved.
===============================================================================================================================================================================================================
 Package                                     Architecture                            Version                                                                  Repository                                  Size
===============================================================================================================================================================================================================
Installing:
 ruby-devel                                  x86_64                                  2.5.9-109.module_el8.5.0+1097+b05a0601                                   appstream                                  126 k

Transaction Summary
===============================================================================================================================================================================================================
Install  1 Package

Total download size: 126 k
Installed size: 294 k
Is this ok [y/N]: y
Downloading Packages:
[MIRROR] ruby-devel-2.5.9-109.module_el8.5.0+1097+b05a0601.x86_64.rpm: Curl error (28): Timeout was reached for http://centosg9.centos.org/centos/8-stream/AppStream/x86_64/os/Packages/ruby-devel-2.5.9-109.module_el8.5.0%2b1097%2bb05a0601.x86_64.rpm [Operation too slow. Less than 1000 bytes/sec transferred the last 30 seconds]
ruby-devel-2.5.9-109.module_el8.5.0+1097+b05a0601.x86_64.rpm                                                                                                                   1.6 kB/s | 126 kB     01:17    
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                          1.6 kB/s | 126 kB     01:18     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                                                       1/1 
  Installing       : ruby-devel-2.5.9-109.module_el8.5.0+1097+b05a0601.x86_64                                                                                                                              1/1 
  Running scriptlet: ruby-devel-2.5.9-109.module_el8.5.0+1097+b05a0601.x86_64                                                                                                                              1/1 
  Verifying        : ruby-devel-2.5.9-109.module_el8.5.0+1097+b05a0601.x86_64                                                                                                                              1/1 

Installed:
  ruby-devel-2.5.9-109.module_el8.5.0+1097+b05a0601.x86_64                                                                                                                                                     

Complete!
[root@DBAMAXWELL ~]# gem install mongo
Building native extensions. This could take a while...
Successfully installed bson-4.14.1
Fetching: mongo-2.17.0.gem (100%)
Successfully installed mongo-2.17.0
2 gems installed
[root@DBAMAXWELL ~]# 

### 安装 Oxidized Gem 时构建本地扩展失败的解决方案 在安装 Oxidized gem 时,如果遇到“failed to build native extension”错误,通常是由于缺少必要的依赖项或环境配置不当引起的。以下是可能的原因和解决方法: #### 1. 确保已安装 Ruby 和相关开发工具 构建本地扩展需要 Ruby 的开发头文件以及编译工具链。确保系统中已正确安装 Ruby 开发包和编译器。 在基于 Debian 的系统上(如 Ubuntu),可以使用以下命令安装必要的依赖项[^1]: ```bash sudo apt-get update sudo apt-get install -y ruby-dev build-essential libssl-dev libreadline-dev zlib1g-dev ``` 在基于 Red Hat 的系统上(如 CentOS 或 Fedora),可以运行以下命令安装依赖项[^2]: ```bash sudo yum groupinstall "Development Tools" sudo yum install -y ruby-devel gcc make openssl-devel libyaml-devel readline-devel zlib-devel ``` #### 2. 检查 Ruby 版本兼容性 Oxidized gem 可能需要特定版本的 Ruby 才能正常工作。建议使用 Ruby 2.5 或更高版本。可以通过以下命令检查当前 Ruby 版本: ```bash ruby --version ``` 如果版本过低,可以使用 RVM(Ruby Version Manager)或其他工具升级 Ruby[^3]。 #### 3. 使用 Bundler 安装依赖 有时直接使用 `gem install` 可能会忽略某些依赖项。推荐使用 Bundler 来管理 gem 包及其依赖关系。首先安装 Bundler: ```bash gem install bundler ``` 然后创建一个 `Gemfile` 并添加以下内容: ```ruby source 'https://rubygems.org' gem 'oxidized' ``` 运行以下命令以安装 Oxidized 及其依赖项: ```bash bundle install ``` #### 4. 检查权限问题 如果以普通用户身份运行 `gem install oxidized`,可能会因权限不足而失败。可以尝试以下方法之一: - 使用 `--user-install` 选项将 gem 安装到用户的主目录下: ```bash gem install oxidized --user-install ``` - 将 gem 安装路径添加到环境变量中: ```bash export PATH=$PATH:$HOME/.gem/ruby/$(ruby -e "puts RbConfig::CONFIG['ruby_version']")/bin ``` #### 5. 手动安装缺失的 gem 如果某些依赖 gem 缺失,可以尝试单独安装它们。例如,Oxidized 常用的依赖包括 `oxidized-script` 和 `oxidized-web`,可以分别安装: ```bash gem install oxidized-script oxidized-web ``` #### 6. 查阅错误日志 如果上述方法均无效,可以查阅详细的错误日志以获取更多信息。运行以下命令并检查输出: ```bash gem install oxidized --verbose ``` --- ### 示例代码:验证安装是否成功 安装完成后,可以运行以下命令验证 Oxidized 是否正常工作: ```bash oxidized -v ``` 如果一切正常,应该能看到 Oxidized 的版本号。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值