安装 Rails 时出错:错误:无法构建 gem 本机扩展。Ubuntu 20.04

hiz*_*rck 5 ruby-on-rails ubuntu-20.04

当我运行此命令时:

gem install rails
Run Code Online (Sandbox Code Playgroud)

我得到了这个输出:

ERROR:  Error installing rails:
        ERROR: Failed to build gem native extension.

        current directory: /home/hizmarck/.rvm/gems/ruby-2.7.1/gems/nokogiri-1.10.9/ext/nokogiri
    /usr/share/rvm/rubies/ruby-2.7.1/bin/ruby -I /usr/share/rvm/rubies/ruby-2.7.1/lib/ruby/site_ruby/2.7.0 -r ./siteconf20200602-62149-hwdwns.rb extconf.rb
    checking if the C compiler accepts ... yes
    Building nokogiri using packaged libraries.
    Using mini_portile version 2.4.0
    checking for gzdopen() in -lz... yes
    checking for iconv... yes
    ************************************************************************
    IMPORTANT NOTICE:

    Building Nokogiri with a packaged version of libxml2-2.9.10
    with the following patches applied:
        - 0001-Revert-Do-not-URI-escape-in-server-side-includes.patch
        - 0002-Remove-script-macro-support.patch
        - 0003-Update-entities-to-remove-handling-of-ssi.patch
        - 0004-libxml2.la-is-in-top_builddir.patch
        - 0005-Fix-infinite-loop-in-xmlStringLenDecodeEntities.patch

    Team Nokogiri will keep on doing their best to provide security
    updates in a timely manner, but if this is a concern for you and want
    to use the system library instead; abort this installation process and
    reinstall nokogiri as follows:

        gem install nokogiri -- --use-system-libraries
            [--with-xml2-config=/path/to/xml2-config]
            [--with-xslt-config=/path/to/xslt-config]

    If you are using Bundler, tell it to use the option:

        bundle config build.nokogiri --use-system-libraries
        bundle install

    Note, however, that nokogiri is not fully compatible with arbitrary
    versions of libxml2 provided by OS/package vendors.
    ************************************************************************
    Extracting libxml2-2.9.10.tar.gz into tmp/x86_64-pc-linux-gnu/ports/libxml2/2.9.10... OK
    Running git apply with /home/hizmarck/.rvm/gems/ruby-2.7.1/gems/nokogiri-1.10.9/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch... OK
    Running git apply with /home/hizmarck/.rvm/gems/ruby-2.7.1/gems/nokogiri-1.10.9/patches/libxml2/0002-Remove-script-macro-support.patch... OK
    Running git apply with /home/hizmarck/.rvm/gems/ruby-2.7.1/gems/nokogiri-1.10.9/patches/libxml2/0003-Update-entities-to-remove-handling-of-ssi.patch... OK
    Running git apply with /home/hizmarck/.rvm/gems/ruby-2.7.1/gems/nokogiri-1.10.9/patches/libxml2/0004-libxml2.la-is-in-top_builddir.patch... OK
    Running git apply with /home/hizmarck/.rvm/gems/ruby-2.7.1/gems/nokogiri-1.10.9/patches/libxml2/0005-Fix-infinite-loop-in-xmlStringLenDecodeEntities.patch... OK
    Running 'configure' for libxml2 2.9.10... OK
    Running 'compile' for libxml2 2.9.10... OK
    Running 'install' for libxml2 2.9.10... OK
    Activating libxml2 2.9.10 (from /home/hizmarck/.rvm/gems/ruby-2.7.1/gems/nokogiri-1.10.9/ports/x86_64-pc-linux-gnu/libxml2/2.9.10)...
    ************************************************************************
    IMPORTANT NOTICE:

    Building Nokogiri with a packaged version of libxslt-1.1.34.

    Team Nokogiri will keep on doing their best to provide security
    updates in a timely manner, but if this is a concern for you and want
    to use the system library instead; abort this installation process and
    reinstall nokogiri as follows:

        gem install nokogiri -- --use-system-libraries
            [--with-xml2-config=/path/to/xml2-config]
            [--with-xslt-config=/path/to/xslt-config]

    If you are using Bundler, tell it to use the option:

        bundle config build.nokogiri --use-system-libraries
        bundle install
    ************************************************************************
    Extracting libxslt-1.1.34.tar.gz into tmp/x86_64-pc-linux-gnu/ports/libxslt/1.1.34... OK
    Running 'configure' for libxslt 1.1.34... OK
    Running 'compile' for libxslt 1.1.34... OK
    Running 'install' for libxslt 1.1.34... OK
    Activating libxslt 1.1.34 (from /home/hizmarck/.rvm/gems/ruby-2.7.1/gems/nokogiri-1.10.9/ports/x86_64-pc-linux-gnu/libxslt/1.1.34)...
    checking for -llzma... yes
    checking for xmlParseDoc() in libxml/parser.h... yes
    checking for xsltParseStylesheetDoc() in libxslt/xslt.h... yes
    checking for exsltFuncRegister() in libexslt/exslt.h... yes
    checking for xmlHasFeature()... yes
    checking for xmlFirstElementChild()... yes
    checking for xmlRelaxNGSetParserStructuredErrors()... yes
    checking for xmlRelaxNGSetParserStructuredErrors()... yes
    checking for xmlRelaxNGSetValidStructuredErrors()... yes
    checking for xmlSchemaSetValidStructuredErrors()... yes
    checking for xmlSchemaSetParserStructuredErrors()... yes
    creating Makefile

    current directory: /home/hizmarck/.rvm/gems/ruby-2.7.1/gems/nokogiri-1.10.9/ext/nokogiri
    make "DESTDIR=" clean

    current directory: /home/hizmarck/.rvm/gems/ruby-2.7.1/gems/nokogiri-1.10.9/ext/nokogiri
    make "DESTDIR="
    compiling html_document.c
    In file included from /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby.h:33,
                     from ./nokogiri.h:33,
                     from ./html_document.h:4,
                     from html_document.c:1:
    html_document.c: In function ‘new’:
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2508:48: warning: cast discards ‘const’ qualifier from pointer target type [-Wcast-qual]
     2508 |        (rb_scan_args_verify(fmt, varc), vars), (char *)fmt, varc)
          |                                                ^
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2340:9: note: in expansion of macro ‘rb_scan_args0’
     2340 |         rb_scan_args0(argc,argvp,fmt,\
          |         ^~~~~~~~~~~~~
    html_document.c:16:3: note: in expansion of macro ‘rb_scan_args’
       16 |   rb_scan_args(argc, argv, "0*", &rest);
          |   ^~~~~~~~~~~~
    html_document.c: At top level:
    cc1: warning: unrecognized command line option ‘-Wno-self-assign’
    cc1: warning: unrecognized command line option ‘-Wno-parentheses-equality’
    cc1: warning: unrecognized command line option ‘-Wno-constant-logical-operand’
    compiling html_element_description.c
    compiling html_entity_lookup.c
    compiling html_sax_parser_context.c
    compiling html_sax_push_parser.c
    compiling nokogiri.c
    compiling xml_attr.c
    In file included from /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby.h:33,
                     from ./nokogiri.h:33,
                     from ./xml_attr.h:4,
                     from xml_attr.c:1:
    xml_attr.c: In function ‘new’:
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2508:48: warning: cast discards ‘const’ qualifier from pointer target type [-Wcast-qual]
     2508 |        (rb_scan_args_verify(fmt, varc), vars), (char *)fmt, varc)
          |                                                ^
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2340:9: note: in expansion of macro ‘rb_scan_args0’
     2340 |         rb_scan_args0(argc,argvp,fmt,\
          |         ^~~~~~~~~~~~~
    xml_attr.c:61:3: note: in expansion of macro ‘rb_scan_args’
       61 |   rb_scan_args(argc, argv, "2*", &document, &name, &rest);
          |   ^~~~~~~~~~~~
    xml_attr.c: At top level:
    cc1: warning: unrecognized command line option ‘-Wno-self-assign’
    cc1: warning: unrecognized command line option ‘-Wno-parentheses-equality’
    cc1: warning: unrecognized command line option ‘-Wno-constant-logical-operand’
    compiling xml_attribute_decl.c
    compiling xml_cdata.c
    In file included from /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby.h:33,
                     from ./nokogiri.h:33,
                     from ./xml_cdata.h:4,
                     from xml_cdata.c:1:
    xml_cdata.c: In function ‘new’:
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2508:48: warning: cast discards ‘const’ qualifier from pointer target type [-Wcast-qual]
     2508 |        (rb_scan_args_verify(fmt, varc), vars), (char *)fmt, varc)
          |                                                ^
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2340:9: note: in expansion of macro ‘rb_scan_args0’
     2340 |         rb_scan_args0(argc,argvp,fmt,\
          |         ^~~~~~~~~~~~~
    xml_cdata.c:23:3: note: in expansion of macro ‘rb_scan_args’
       23 |   rb_scan_args(argc, argv, "2*", &doc, &content, &rest);
          |   ^~~~~~~~~~~~
    xml_cdata.c: At top level:
    cc1: warning: unrecognized command line option ‘-Wno-self-assign’
    cc1: warning: unrecognized command line option ‘-Wno-parentheses-equality’
    cc1: warning: unrecognized command line option ‘-Wno-constant-logical-operand’
    compiling xml_comment.c
    In file included from /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby.h:33,
                     from ./nokogiri.h:33,
                     from ./xml_comment.h:4,
                     from xml_comment.c:1:
    xml_comment.c: In function ‘new’:
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2508:48: warning: cast discards ‘const’ qualifier from pointer target type [-Wcast-qual]
     2508 |        (rb_scan_args_verify(fmt, varc), vars), (char *)fmt, varc)
          |                                                ^
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2340:9: note: in expansion of macro ‘rb_scan_args0’
     2340 |         rb_scan_args0(argc,argvp,fmt,\
          |         ^~~~~~~~~~~~~
    xml_comment.c:21:3: note: in expansion of macro ‘rb_scan_args’
       21 |   rb_scan_args(argc, argv, "2*", &document, &content, &rest);
          |   ^~~~~~~~~~~~
    xml_comment.c: At top level:
    cc1: warning: unrecognized command line option ‘-Wno-self-assign’
    cc1: warning: unrecognized command line option ‘-Wno-parentheses-equality’
    cc1: warning: unrecognized command line option ‘-Wno-constant-logical-operand’
    compiling xml_document.c
    xml_document.c: In function ‘dealloc’:
    xml_document.c:49:25: warning: passing argument 2 of ‘rb_st_foreach’ from incompatible pointer type [-Wincompatible-pointer-types]
       49 |   st_foreach(node_hash, dealloc_node_i, (st_data_t)doc);
          |                         ^~~~~~~~~~~~~~
          |                         |
          |                         int (*)(xmlNode *, xmlNode *, xmlDoc *) {aka int (*)(struct _xmlNode *, struct _xmlNode *, struct _xmlDoc *)}
    In file included from /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/intern.h:39,
                     from /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2148,
                     from /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby.h:33,
                     from ./nokogiri.h:33,
                     from ./xml_document.h:4,
                     from xml_document.c:1:
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/st.h:141:31: note: expected ‘int (*)(st_data_t,  st_data_t,  st_data_t)’ {aka ‘int 

...
          |   ^~~~~~~~~~~~
    xml_document.c: At top level:
    cc1: warning: unrecognized command line option ‘-Wno-self-assign’
    cc1: warning: unrecognized command line option ‘-Wno-parentheses-equality’
    cc1: warning: unrecognized command line option ‘-Wno-constant-logical-operand’
    compiling xml_document_fragment.c
    In file included from /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby.h:33,
                     from ./nokogiri.h:33,
                     from ./xml_document_fragment.h:4,
                     from xml_document_fragment.c:1:
    xml_document_fragment.c: In function ‘new’:
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2508:48: warning: cast discards ‘const’ qualifier from pointer target type [-Wcast-qual]
     2508 |        (rb_scan_args_verify(fmt, varc), vars), (char *)fmt, varc)
          |                                                ^
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2340:9: note: in expansion of macro ‘rb_scan_args0’
     2340 |         rb_scan_args0(argc,argvp,fmt,\
          |         ^~~~~~~~~~~~~
    xml_document_fragment.c:17:3: note: in expansion of macro ‘rb_scan_args’
       17 |   rb_scan_args(argc, argv, "1*", &document, &rest);
          |   ^~~~~~~~~~~~
    xml_document_fragment.c: At top level:
    cc1: warning: unrecognized command line option ‘-Wno-self-assign’
    cc1: warning: unrecognized command line option ‘-Wno-parentheses-equality’
    cc1: warning: unrecognized command line option ‘-Wno-constant-logical-operand’
    compiling xml_dtd.c
    compiling xml_element_content.c
    compiling xml_element_decl.c
    compiling xml_encoding_handler.c
    compiling xml_entity_decl.c
    compiling xml_entity_reference.c
    In file included from /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby.h:33,
                     from ./nokogiri.h:33,
                     from ./xml_entity_reference.h:4,
                     from xml_entity_reference.c:1:
    xml_entity_reference.c: In function ‘new’:
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2508:48: warning: cast discards ‘const’ qualifier from pointer target type [-Wcast-qual]
     2508 |        (rb_scan_args_verify(fmt, varc), vars), (char *)fmt, varc)
          |                                                ^
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2340:9: note: in expansion of macro ‘rb_scan_args0’
     2340 |         rb_scan_args0(argc,argvp,fmt,\
          |         ^~~~~~~~~~~~~
    xml_entity_reference.c:18:3: note: in expansion of macro ‘rb_scan_args’
       18 |   rb_scan_args(argc, argv, "2*", &document, &name, &rest);
          |   ^~~~~~~~~~~~
    xml_entity_reference.c: At top level:
    cc1: warning: unrecognized command line option ‘-Wno-self-assign’
    cc1: warning: unrecognized command line option ‘-Wno-parentheses-equality’
    cc1: warning: unrecognized command line option ‘-Wno-constant-logical-operand’
    compiling xml_io.c
    xml_io.c: In function ‘io_read_callback’:
    xml_io.c:20:22: warning: passing argument 1 of ‘rb_rescue’ from incompatible pointer type [-Wincompatible-pointer-types]
       20 |   string = rb_rescue(read_check, (VALUE)args, read_failed, 0);
          |                      ^~~~~~~~~~
          |                      |
          |                      VALUE (*)(VALUE *) {aka long unsigned int (*)(long unsigned int *)}
    In file included from /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby.h:33,
                     from ./nokogiri.h:33,
                     from ./xml_io.h:4,
                     from xml_io.c:1:
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:1987:17: note: expected ‘VALUE (*)(VALUE)’ {aka ‘long unsigned int (*)(long unsigned int)’} but argument is of type ‘VALUE (*)(VALUE *)’ {aka ‘long unsigned int (*)(long unsigned int *)’}
     1987 | VALUE rb_rescue(VALUE(*)(VALUE),VALUE,VALUE(*)(VALUE,VALUE),VALUE);
          |                 ^~~~~~~~~~~~~~~
    xml_io.c:20:47: warning: passing argument 3 of ‘rb_rescue’ from incompatible pointer type [-Wincompatible-pointer-types]
       20 |   string = rb_rescue(read_check, (VALUE)args, read_failed, 0);
          |                                               ^~~~~~~~~~~
          |                                               |
          |                                               VALUE (*)(void) {aka long unsigned int (*)(void)}
    In file included from /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby.h:33,
                     from ./nokogiri.h:33,
                     from ./xml_node_set.h:4,
                     from xml_node_set.c:1:
    xml_node_set.c: In function ‘slice’:
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2508:48: warning: cast discards ‘const’ qualifier from pointer target type [-Wcast-qual]
     2508 |        (rb_scan_args_verify(fmt, varc), vars), (char *)fmt, varc)
          |                                                ^
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2340:9: note: in expansion of macro ‘rb_scan_args0’
     2340 |         rb_scan_args0(argc,argvp,fmt,\
          |         ^~~~~~~~~~~~~
    xml_node_set.c:294:5: note: in expansion of macro ‘rb_scan_args’
      294 |     rb_scan_args(argc, argv, "11", NULL, NULL);
          |     ^~~~~~~~~~~~
    In file included from /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby.h:33,
                     from ./nokogiri.h:33,
                     from ./xml_node_set.h:4,
                     from xml_node_set.c:1:
    xml_node_set.c: In function ‘init_xml_node_set’:
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2799:117: warning: passing argument 3 of ‘rb_define_method0’ from incompatible pointer type [-Wincompatible-pointer-types]
     2799 | #define rb_define_method(klass, mid, func, arity) rb_define_method_choose_prototypem3((arity),(func))((klass),(mid),(func),(arity));
          |                                                                                                                     ^~~~~~
          |                                                                                                                     |
          |                                                                                                                     VALUE (*)(VALUE,  VALUE) {aka long unsigned int (*)(long unsigned int,  long unsigned int)}
    xml_node_set.c:479:3: note: in expansion of macro ‘rb_define_method’
      479 |   rb_define_method(klass, "to_a", to_array, 0);
          |   ^~~~~~~~~~~~~~~~
    In file included from /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2148,
                     from /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby.h:33,
                     from ./nokogiri.h:33,
                     from ./xml_node_set.h:4,
                     from xml_node_set.c:1:
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2775:27: note: expected ‘VALUE (*)(VALUE)’ {aka ‘long unsigned int (*)(long unsigned int)’} but argument is of type ‘VALUE (*)(VALUE,  VALUE)’ {aka ‘long unsigned int (*)(long unsigned int,  long unsigned int)’}
     2775 | RB_METHOD_DEFINITION_DECL(rb_define_method, (2,3), (VALUE klass, const char *name), (klass, name))
          |                           ^~~~~~~~~~~~~~~~
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/intern.h:1042:82: note: in definition of macro ‘RB_METHOD_DEFINITION_DECL_C’
     1042 |     __attribute__((__unused__,__weakref__(#def),__nonnull__ nonnull))static void defname(RB_UNWRAP_MACRO decl,VALUE(*func)funcargs,int arity);
          |                                                                                  ^~~~~~~
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/intern.h:1074:1: note: in expansion of macro ‘RB_METHOD_DEFINITION_DECL_1’
     1074 | RB_METHOD_DEFINITION_DECL_1(def,nonnull,def##0 ,0 ,decl,vars,(VALUE)) \
          | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
    /usr/share/rvm/rubies/ruby-2.7.1/include/ruby-2.7.0/ruby/ruby.h:2775:1: note: in expansion of macro ‘RB_METHOD_DEFINITION_DECL’
     2775 | RB_METHOD_DEFINITION_DECL(rb_define_method, (2,3), (VALUE klass, const char *name), (klass, name))
          | ^~~~~~~~~~~~~~~~~~~~~~~~~
    xml_node_set.c: At top level:
    cc1: warning: unrecognized command line option ‘-Wno-self-assign’
    cc1: warning: unrecognized command line option ‘-Wno-parentheses-equality’
    cc1: warning: unrecognized command line option ‘-Wno-constant-logical-operand’
    compiling xml_processing_instruction.c
    In file included from /usr/share/rvm/rubies/ruby-

Osk*_*ins 18

Make 进程找不到 mkdir 命令。

$ which mkdir
/bin/mkdir
Run Code Online (Sandbox Code Playgroud)

由于进程正在搜索其中的命令,/usr/bin/mkdir因此无法找到。它可以通过创建一个指向正确路径的符号链接来修复:

sudo ln -s /bin/mkdir /usr/bin/mkdir
Run Code Online (Sandbox Code Playgroud)

答案来源 - stackoverflow 帖子