libxml-Ruby
をインストールしようとしています。 libxml2
、libxslt
、coreutils
をインストールしました
この問題に関する他の投稿も読んだことがありますが、解決したものはありません。
brew list libxslt
/opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/bin/xslt-config
/opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/bin/xsltproc
/opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/include/libexslt/ (3 files)
/opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/include/libxslt/ (21 files)
/opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/lib/libexslt.0.dylib
/opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/lib/libxslt.1.dylib
/opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/lib/pkgconfig/ (2 files)
/opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/lib/ (5 other files)
/opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/share/aclocal/libxslt.m4
/opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/share/doc/ (90 files)
/opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/share/man/ (3 files)
brew list libxml2
/opt/boxen/homebrew/Cellar/libxml2/2.9.4/bin/xml2-config
/opt/boxen/homebrew/Cellar/libxml2/2.9.4/bin/xmlcatalog
/opt/boxen/homebrew/Cellar/libxml2/2.9.4/bin/xmllint
/opt/boxen/homebrew/Cellar/libxml2/2.9.4/include/libxml2/ (47 files)
/opt/boxen/homebrew/Cellar/libxml2/2.9.4/lib/libxml2.2.dylib
/opt/boxen/homebrew/Cellar/libxml2/2.9.4/lib/cmake/libxml2/libxml2-config.cmake
/opt/boxen/homebrew/Cellar/libxml2/2.9.4/lib/pkgconfig/libxml-2.0.pc
/opt/boxen/homebrew/Cellar/libxml2/2.9.4/lib/ (3 other files)
/opt/boxen/homebrew/Cellar/libxml2/2.9.4/share/aclocal/libxml.m4
/opt/boxen/homebrew/Cellar/libxml2/2.9.4/share/doc/ (153 files)
/opt/boxen/homebrew/Cellar/libxml2/2.9.4/share/gtk-doc/ (55 files)
/opt/boxen/homebrew/Cellar/libxml2/2.9.4/share/man/ (4 files)
gem install libxml-Ruby
は次のエラーを生成します。
Building native extensions. This could take a while...
ERROR: Error installing libxml-Ruby:
ERROR: Failed to build gem native extension.
current directory: /opt/rubies/2.3.0/lib/Ruby/gems/2.3.0/gems/libxml-Ruby-2.9.0/ext/libxml
/opt/boxen/rbenv/versions/2.3.0/bin/Ruby -r ./siteconf20160630-68248-1qaz7dk.rb extconf.rb
checking for libxml/xmlversion.h in /opt/include/libxml2,/opt/local/include/libxml2,/usr/local/include/libxml2,/usr/include/libxml2... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--Ruby=/opt/boxen/rbenv/versions/2.3.0/bin/$(Ruby_BASE_NAME)
--with-xml2-config
--without-xml2-config
--with-xml2-dir
--without-xml2-dir
--with-xml2-include
--without-xml2-include=${xml2-dir}/include
--with-xml2-lib
--without-xml2-lib=${xml2-dir}/lib
extconf failure: need libxml2.
Install the library or try one of the following options to extconf.rb:
--with-xml2-config=/path/to/xml2-config
--with-xml2-dir=/path/to/libxml2
--with-xml2-lib=/path/to/libxml2/lib
--with-xml2-include=/path/to/libxml2/include
To see why this extension failed to compile, please check the mkmf.log which can be found here:
/opt/boxen/rbenv/versions/2.3.0/lib/Ruby/gems/2.3.0/extensions/x86_64-darwin-14/2.3.0-static/libxml-Ruby-2.9.0/mkmf.log
extconf failed, exit code 1
Gem files will remain installed in /opt/boxen/rbenv/versions/2.3.0/lib/Ruby/gems/2.3.0/gems/libxml-Ruby-2.9.0 for inspection.
Results logged to /opt/boxen/rbenv/versions/2.3.0/lib/Ruby/gems/2.3.0/extensions/x86_64-darwin-14/2.3.0-static/libxml-Ruby-2.9.0/gem_make.out
高レベルの問題はここに示されています:
checking for libxml/xmlversion.h in /opt/include/libxml2,/opt/local/include/libxml2,/usr/local/include/libxml2,/usr/include/libxml2... no
基本的に、インストーラーはlibxml/xmlversion.h
が見つからないと言っていますが、より一般的にはlibxml2
の場所が見つからない可能性があります。探している4つのディレクトリがわかるので、最初のステップは、それらのディレクトリをチェックして、libxml2
が存在するかどうかを確認することです。
これらの4つの場所のいずれにも存在しないと仮定すると、それを見つける必要があります。 find / -name xmlversion.h
(Sudo
が必要な場合があります)を実行して、libxml2
がインストールされた場所を特定します。 この回答 に基づくと、あなたの問題はbrew
が/usr/local/Cellar/libxml2
にインストールしたことだと思いますが、それを確認する必要があります。場所が決まったら、gem install
コマンドでその場所を手動で指定できます。このようなもの:(ただし、実際のパスをpath/to
に入力してください)
gem install libxml-Ruby --with-xml2-dir=/path/to/libxml2 --with-xml2-lib=/path/to/libxml2/lib --with-xml2-include=/path/to/libxml2/include
Brewを使用してlibxml2をインストールした後、同様の問題が発生しました
醸造リンクは問題を解決しましたbrew link --force libxml2
MacOSMojaveにアップグレードした後の生活。
xcode-select --install
brew install libxml2
brew link --force libxml2
gem install libxml-Ruby -v '2.9.0' -- --use-system-libraries=true --with-xml2-include="$(xcrun --show-sdk-path)"/usr/include/libxml2
私の例では、libxml-Rubygemのバージョン2.9.0
をインストールしました。必要に応じてバージョン文字列を変更してください。可能な場合は、Gemfile.lock
を調べて、インストールする必要があるlibxml-Ruby
Bundlerのバージョンを特定します。
自作:
libxml2はkegのみです。つまり、macOSはすでにこのソフトウェアを提供しており、別のバージョンを並行してインストールすると、あらゆる種類の問題が発生する可能性があるため、/ usr/localにシンボリックリンクされていません。
したがって、libxmlパスを直接設定する必要があります
brew install libxml2
gem install libxml-Ruby \
-- \
--with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config"
P.S.
最新のルビーで例外が発生した場合:
無視してください。 gemが正常にインストールされました。 Rdocドキュメントの生成だけが失敗しました。
The internal error was:
(NoMethodError) undefined method `[]' for nil:NilClass
ERROR: While executing gem ... (NoMethodError)
undefined method `[]' for nil:NilClass
macOSにはlibmxl2
がインストールされていますが、最初にインストールするためにbrew
のようなユーティリティを使用する必要はありません。ただし、ヘッダーは/usr/include/libxml
ではなく/usr/include/libxml2/libxml
にあります。
libxml-Ruby
gem
のconfigureスクリプトは、次のようなコードをコンパイルすることにより、libxml
がインストールされているかどうかを検出しようとします。
#include <libxml/xmlversion.h>
ただし、Xcodeに付属のコンパイラでコンパイルする場合は、次のコードのみが機能します。
#include <libxml2/libxml/xmlversion.h>
秘訣は、configureスクリプトにヘッダーの場所を知らせることです。 XcodeがインストールされているmacOSシステムでは、以下が機能します。
gem install libxml-Ruby -v '3.1.0' -- --with-xml2-include=`xcrun --show-sdk-path`/usr/include/libxml2
また、brew
を使用してlibxml2
をインストールしましたが、次のオプションが必要でした。
brew install libxml2 --with-xml2-config
gem install libxml-Ruby -- --with-xml2-config=/usr/local/homebrew/opt/libxml2/bin/xml2-config
1つの解決策は次のとおりです。
cd /Library/Developer/CommandLineTools/Packages/ $
open macOS_SDK_headers_for_macOS_10.14.pkg
MacOS10.14のヘッダーを強制的に再インストールします。