macOS安装libxml-ruby/nokogiri报错:找不到'plist/Node.h'文件
解决macOS High Sierra下安装libxml-ruby和nokogiri的原生扩展构建错误
我在处理旧版macOS的Ruby gem安装问题时经常遇到这类情况——系统自带的libxml2库缺少编译所需的头文件(比如你碰到的plist/Node.h),导致gem无法完成原生扩展的构建。下面是具体的解决步骤:
1. 确认Xcode命令行工具配置无误
首先检查Xcode命令行工具的路径是否正确,执行:
xcode-select --print-path
如果输出不是/Applications/Xcode.app/Contents/Developer,运行以下命令切换路径:
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
另外,务必确保你已经接受了Xcode的许可协议,否则编译过程可能会被中断:
sudo xcodebuild -license accept
2. 用Homebrew安装完整的libxml2和libxslt库
系统自带的libxml2版本通常裁剪了一些非核心组件,而Homebrew提供的完整版包含所有必要的头文件。如果还没安装Homebrew,先执行这个命令安装(直接运行即可,无需跳转外部网站):
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
然后安装所需的库:
brew install libxml2 libxslt
3. 指定库路径安装目标gem
安装libxml-ruby时,明确告诉gem使用Homebrew安装的库路径:
sudo gem install libxml-ruby -n /usr/local/bin -- --with-xml2-include=$(brew --prefix libxml2)/include/libxml2 --with-xml2-lib=$(brew --prefix libxml2)/lib
安装nokogiri时,需要同时指定libxml2和libxslt的路径:
sudo gem install nokogiri -n /usr/local/bin -- --with-xml2-include=$(brew --prefix libxml2)/include/libxml2 --with-xml2-lib=$(brew --prefix libxml2)/lib --with-xslt-include=$(brew --prefix libxslt)/include --with-xslt-lib=$(brew --prefix libxslt)/lib
备选方案:尝试预编译二进制包
如果你不想手动配置路径,可以试试安装nokogiri的预编译二进制版本,运行:
sudo gem install nokogiri -n /usr/local/bin --use-system-libraries
这个命令会自动尝试匹配系统中的库路径,有时候能直接绕过编译错误。
内容的提问来源于stack exchange,提问作者Cœur
相关产品推荐
相关产品推荐

