【问题标题】:Gem::Ext::BuildError: ERROR: Failed to build gem native extension for Puma GemGem::Ext::BuildError: 错误:无法为 Puma Gem 构建 gem 原生扩展
【发布时间】:2016-03-03 23:11:29
【问题描述】:

我已将我的 ruby​​ 项目从 Linux(使用 RVM)导入到 MacOSX(rbenv)。两者都使用相同版本的 rails & ruby​​。当我按照 GoRails 指南在两台机器上安装 RoR 时。

因此,当我将 sample_app 从 Linux 导入到 MacOSX 时,我运行了 bundle install。我安装了很多近 50-100 的宝石,但这个失败了。我不知道为什么它会失败。对我来说,它似乎无法编译某些 c 文件,但我不知道如何修复这些错误。谢谢

Installing puma 2.11.1 with native extensions

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /usr/local/var/rbenv/versions/2.2.3/bin/ruby -r ./siteconf20160304-50117-b8gsxw.rb extconf.rb
checking for BIO_read() in -lcrypto... yes
checking for SSL_CTX_new() in -lssl... yes
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling http11_parser.c
compiling io_buffer.c
io_buffer.c:119:10: warning: passing 'uint8_t *' (aka 'unsigned char *') to parameter of type 'const char *' converts between pointers to integer types with different sign [-Wpointer-sign]
  return rb_str_new(b->top, b->cur - b->top);
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/var/rbenv/versions/2.2.3/include/ruby-2.2.0/ruby/intern.h:796:20: note: expanded from macro 'rb_str_new'
        rb_str_new_static((str), (len)) : \
                          ^~~~~
/usr/local/var/rbenv/versions/2.2.3/include/ruby-2.2.0/ruby/intern.h:727:37: note: passing argument to parameter here
VALUE rb_str_new_static(const char *, long);
                                    ^
io_buffer.c:119:10: warning: passing 'uint8_t *' (aka 'unsigned char *') to parameter of type 'const char *' converts between pointers to integer types with different sign [-Wpointer-sign]
  return rb_str_new(b->top, b->cur - b->top);
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/var/rbenv/versions/2.2.3/include/ruby-2.2.0/ruby/intern.h:797:13: note: expanded from macro 'rb_str_new'
        rb_str_new((str), (len));         \
                   ^~~~~
/usr/local/var/rbenv/versions/2.2.3/include/ruby-2.2.0/ruby/intern.h:706:29: note: passing argument to parameter here
VALUE rb_str_new(const char*, long);
                            ^
2 warnings generated.
compiling mini_ssl.c
In file included from mini_ssl.c:3:
/usr/local/var/rbenv/versions/2.2.3/include/ruby-2.2.0/ruby/backward/rubyio.h:2:2: warning: use "ruby/io.h" instead of "rubyio.h" [-W#warnings]
#warning use "ruby/io.h" instead of "rubyio.h"
 ^
mini_ssl.c:4:10: fatal error: 'openssl/bio.h' file not found
#include <openssl/bio.h>
         ^
1 warning and 1 error generated.
make: *** [mini_ssl.o] Error 1

make failed, exit code 2

Gem files will remain installed in /usr/local/var/rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/puma-2.11.1 for inspection.
Results logged to /usr/local/var/rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-15/2.2.0-static/puma-2.11.1/gem_make.out

【问题讨论】:

    标签: ruby-on-rails macos


    【解决方案1】:

    您需要自制软件和 openssl。运行brew install openssl 然后 bundle config build.puma --with-opt-dir=/usr/local/opt/openssl

    然后运行bundle install 应该可以工作。

    相关问题:https://github.com/puma/puma/issues/718

    【讨论】:

    • 我已经安装了 openssl > brew install openssl 警告:openssl-1.0.2g 已经安装
    【解决方案2】:

    如果您使用 ubuntu 14.04 到任何升级版本,并且如果您在系统中安装了 OpenSSL,那么您只需要运行这些命令

    首先只需获取 OpenSSL 正常安装的位置,如果您已安装在单独的位置,则它安装在此位置 /usr/bin/openssl 获取您的位置首先使用

     sudo find / -name openssl
    

    然后

    bundle config build.puma --with-opt-dir=/usr/bin/openssl
    

    然后

    bundle install 
    

    除非你安装的OpenSSL路径正确,否则会成功

    如果您在安装之前没有安装 OpenSSL,请使用

    sudo apt-get install openssl
    

    它将完美运行。 干杯

    【讨论】:

    【解决方案3】:

    在 ubuntu 上安装 openssl ruby​​-openssl 和 libssl-dev 终于帮了我。

    apt-get install openssl ruby​​-openssl libssl-dev

    【讨论】:

      【解决方案4】:

      您是否尝试使用以下标志安装 gem?

      -- --with-cflags="-Wno-error=implicit-function-declaration"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-25
        • 1970-01-01
        • 2015-12-22
        • 1970-01-01
        • 2014-06-10
        • 1970-01-01
        • 2017-12-07
        相关资源
        最近更新 更多