เกิดข้อผิดพลาดขณะติดตั้ง json gem 'mkmf.rb ไม่พบไฟล์ส่วนหัวสำหรับ ruby'


407

สำหรับบริบทนั้นอยู่บนเซิร์ฟเวอร์ระยะไกลที่มีไฟร์วอลล์ ฉันกำลังตั้งค่าสภาพแวดล้อมผ่านพรอกซี ruby 1.8.7ฉันมี เมื่อฉันพยายามที่จะติดตั้งอัญมณี ..

sudo gem install --http-proxy <host address>:<port> json

ฉันได้รับข้อผิดพลาดต่อไปนี้:

Building native extensions.  This could take a while...
ERROR:  Error installing json:
        ERROR: Failed to build gem native extension.

/usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/ruby.h

Gem files will remain installed in /usr/lib64/ruby/gems/1.8/gems/json-1.8.1 for inspection.
Results logged to /usr/lib64/ruby/gems/1.8/gems/json-1.8.1/ext/json/ext/generator/gem_make.out

เนื่องจากฉันไม่แน่ใจว่าปัญหาคืออะไรฉันจึงค้นหาและพบสิ่งเหล่านี้

คำใบ้ใด ๆ ขอบคุณ!


ตรวจสอบ/usr/lib/ruby/ruby.hไฟล์หากมีอยู่แสดงข้อความผิดพลาดจากgem_make.outเรา
МалъСкрылевъ

คำตอบ:


785

การปรับปรุงยุคสมัยใหม่ตามที่ระบุไว้โดย mimoralea :

ในกรณีที่คุณใช้ ruby ​​2.0 หรือ 2.2 (ขอบคุณ @ patrick-davey)

sudo apt-get install ruby2.0-dev
sudo apt-get install ruby2.2-dev
sudo apt-get install ruby2.3-dev

หรือวิธีทั่วไป:

sudo apt-get install ruby-dev

หรือ

sudo apt-get install ruby`ruby -e 'puts RUBY_VERSION[/\d+\.\d+/]'`-dev

การเชื่อมโยงแรกที่คุณได้โพสต์เป็นว่ากรณีของคุณ: ไม่มีการพัฒนาสภาพแวดล้อมทับทิมติดตั้ง พัฒนา env Cเป็นสิ่งจำเป็นเพื่อนามสกุลทับทิมรวบรวมที่เขียนส่วนใหญ่อยู่ใน พร็อกซีไม่มีส่วนเกี่ยวข้องกับปัญหา: ทุกอย่างถูกดาวน์โหลดได้ดีการคอมไพล์ล้มเหลว

ฉันอยากจะแนะนำให้คุณติดตั้งแพคเกจruby-dev( ruby-develสำหรับ distros ตามรอบต่อนาที) ลงบนเครื่องเป้าหมายของคุณ

gcc แพคเกจอาจจำเป็นเช่นกัน

ลอง:

$ sudo apt-get install ruby-dev

หรือสำหรับ Redhat distro:

$ sudo yum install ruby-devel

หรือสำหรับ [open] SuSE:

$ sudo zypper install ruby-devel

2
ขอบคุณ! ฉันหมายถึงคำตอบในคำถามนั้นดูเหมือนเฉพาะโมดูล ผมคิดว่าแทนมันruby-dev ruby-develที่นี่ฉันพบสิ่งที่ฉันต้องการ - digitalocean.com/community/articles/…
Navneet

9
หลังจากติดตั้ง ruby-devel (บน Fedora 20) ฉันพบข้อผิดพลาด *** extconf.rb ล้มเหลว *** เมื่อติดตั้ง gcc ตามที่คุณแนะนำทุกอย่างทำงานได้ดี
Wayne Riesterer

คุณสามารถเพิ่มsudo zypper install ruby-develสำหรับ openSUSE
superbob

สิ่งนี้ไม่ได้ทำบน Ubuntu แพ็คเกจที่หายไปคือruby2.2-dev(หรือเวอร์ชั่นที่คุณติดตั้ง)
Luís de Sousa

2
ไม่คำตอบนี้ไม่ได้ช่วยแก้ไขอะไรเลย คำตอบที่ถูกต้องคือหนึ่งโดย mimoralea
Luís de Sousa

177

สำหรับXcode 11 บน macOS 10.14สิ่งนี้สามารถเกิดขึ้นได้หลังจากติดตั้ง Xcode และติดตั้งเครื่องมือบรรทัดคำสั่งและยอมรับใบอนุญาตด้วย

sudo xcode-select --install
sudo xcodebuild -license accept

ปัญหาคือ Xcode 11 จัดส่ง macOS 10.15 SDK ซึ่งรวมส่วนหัวสำหรับ ruby2.6 แต่ไม่ได้ใช้กับ ruby2.3 ของ macOS 10.14 คุณสามารถตรวจสอบว่าปัญหานี้เป็นปัญหาของคุณหรือไม่โดยการเรียกใช้

ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

ซึ่งบน macOS 10.14 ด้วย Xcode 11 จะพิมพ์พา ธ ที่ไม่มีอยู่จริง

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

อย่างไรก็ตาม Xcode 11 ติดตั้ง MacOS 10.14 SDK /Library/Developer/CommandLineTools/SDKs/MacOS10.14.sdkภายใน ไม่จำเป็นที่จะทำให้สกปรกไดเรกทอรีของระบบโดยการติดตั้งไฟล์ส่วนหัวเก่าตามที่แนะนำในคำตอบอื่น ๆ แต่โดยการเลือก SDK นั้นจะพบส่วนหัว ruby2.3 ที่เหมาะสม:

sudo xcode-select --switch /Library/Developer/CommandLineTools
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

ตอนนี้ควรพิมพ์อย่างถูกต้อง

/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

ในทำนองเดียวกันgem installควรทำงานในขณะที่เลือก SDK นั้น

หากต้องการเปลี่ยนกลับไปเป็น Xcode SDK ปัจจุบันให้ใช้

sudo xcode-select --switch /Applications/Xcode.app

14
ตำนาน. ปัญหาของฉันตรงกับที่ 10.14.6 ความเศร้าไม่สามารถโหวตได้สองครั้ง
Diego Freniche

2
คุณครับเป็นคนที่มีความรู้ที่คลุมเครือ ขอบคุณมาก
Rubin Simons

ขอบคุณสำหรับข้อมูลรายละเอียด! ในที่สุดมันก็ทำงานได้การผลิต "ข้อผิดพลาด: ข้อผิดพลาดในการติดตั้ง jekyll: jekyll-sass-converter ต้องการ Ruby version> = 2.4.0" นั่นทำให้ฉันหัวเราะ
Nickolay Olshevsky

@NickolayOlshevsky ในกรณีนี้คุณต้องติดตั้ง ruby ​​ผ่าน homebrew ซึ่งเป็นรุ่น 2.6.5
joki

1
คุณเขียนโค้ดตามตำนาน
Aljosha Novakovic

75

ในกรณีที่คุณใช้ ruby ​​2.0 หรือ 2.2 (ขอบคุณ @ patrick-davey) หรือ 2.3 (ขอบคุณ @juanitofatas)

sudo apt-get install ruby-dev
sudo apt-get install ruby2.0-dev
sudo apt-get install ruby2.2-dev
sudo apt-get install ruby2.3-dev

และคุณได้รูปแบบที่นี่ ...


6
หรือถ้าคุณใช้ 2.2 ...sudo apt-get install ruby2.2-dev
patrickdavey

@ patrick-daveyE: Unable to locate package ruby2.2-dev E: Couldn't find any package by regex 'ruby2.2-dev'
Aparichith

@dson อาจเป็นเพราะคุณใช้ Ubuntu รุ่นเก่า ลองอัปเกรด
Pithikos

ฉันได้รับข้อผิดพลาดเดียวกันเช่นกันและฉันใช้ Linux Mint เวอร์ชันอัปเดตอย่างสมบูรณ์ ฉันไม่คิดว่าระบบปฏิบัติการรุ่นนี้เป็นปัญหา
Andrew Faulkner

2
หากคุณใช้ Ubuntu รุ่นเก่าเช่น Trusty (14.04) ให้เพิ่ม brightbox PPA สำหรับ Ruby:sudo apt-add-repository -y ppa:brightbox/ruby-ng && sudo apt-get update && sudo apt-get install -y ruby2.2-dev
Siddhu


19

สำหรับผู้ที่ได้รับสิ่งนี้ใน Mac OS X คุณอาจต้องเรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งเครื่องมือบรรทัดคำสั่ง XCode แม้ว่าคุณได้ติดตั้ง XCode แล้ว:

sudo xcode-select --install

นอกจากนี้คุณต้องยอมรับข้อกำหนดและเงื่อนไขของ XCode ด้วยการรันคำสั่งต่อไปนี้:

sudo xcodebuild -license

นี่คือคำตอบที่ถูกต้องสำหรับฉัน ฉันไม่มีส่วนหัวของการพัฒนาทับทิม เมื่อฉันติดตั้ง xCode คำสั่งเดิมที่ฉันพยายามจะใช้งานได้ ขอบคุณ!
Sweet Chilly Philly

ใน OSX กับ Mojave ฉันต้องเรียกใช้เป็น:su - $USER -c 'xcode-select --install'
Belden

มันก็ใช้ได้กับฉันเช่นกัน
adougies

11

ฉันมีปัญหาคล้ายกันโดยใช้ cygwin เพื่อเรียกใช้คำสั่งต่อไปนี้:

$ gem install rerun

ฉันแก้ไขได้โดยติดตั้งแพคเกจ cygwin ต่อไปนี้:

  • ทับทิม devel
  • libffi-devel
  • GCC-core
  • GCC-กรัม ++
  • แต่งหน้า
  • automake1.15

segfaults สำหรับฉัน:/cygdrive/z/.gem/ruby/extensions/x86-cygwin/json-1.8.3/json/ext/parser.so: [BUG] Segmentation fault at 0x0001b8
rr-

แก้ไขโดยการทำrm -rf ~/.gem/และออกคำสั่งอีกครั้ง
rr-

ruby-devในราสเบอร์รี่ pi
CONVid19

11

โซลูชันที่โหวตส่วนใหญ่ไม่ทำงานบนเครื่องของฉัน (linux mint 18.04) หลังจากดูอย่างระมัดระวังฉันพบว่า g ++ หายไป แก้ไขได้ด้วย

sudo apt-get install g ++


1
สิ่งนี้ใช้ได้กับฉันใน Ubuntu 18.04 ฉันยังต้องทำการติดตั้ง sudo apt-get ก่อนที่จะติดตั้ง g ++ เพื่อให้ทำงานได้
Scott Lindner

สามารถยืนยันการติดตั้งmakeและg++แก้ไขปัญหาของฉันใน Ubuntu 18.04 ได้เช่นกัน!
Arda


5

Xcode 11 / macOS Catalina

บน Xcode 11 / macOS Catalina ไฟล์ส่วนหัวจะไม่อยู่ในตำแหน่งเดิมอีกต่อไปและ/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgไฟล์เก่าจะไม่สามารถใช้งานได้อีกต่อไป

แต่จะติดตั้งส่วนหัวไว้ใน/usr/includeไดเรกทอรีของเส้นทาง SDK ปัจจุบันแทน:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include

xcrun --show-sdk-pathส่วนใหญ่ของไดเรกทอรีนี้สามารถพบได้โดยใช้การส่งออกของ และถ้าคุณเพิ่มพา ธ นี้ให้กับCPATHตัวแปรสภาพแวดล้อมแล้วสคริปต์สร้าง (รวมถึงสคริปต์ที่เรียกผ่านbundle) โดยทั่วไปจะสามารถค้นหาได้

ฉันแก้ไขได้โดยการตั้งค่าCPATHใน.zshrcไฟล์ของฉัน:

export CPATH="$(xcrun --show-sdk-path)/usr/include"

หลังจากเปิดเชลล์ใหม่ (หรือเรียกใช้source .zshrc) ฉันไม่ได้รับข้อความแสดงข้อผิดพลาดอีกต่อไปmkmf.rb ไม่สามารถค้นหาไฟล์ส่วนหัวสำหรับ ruby ​​ได้ที่ /usr/lib/ruby/ruby.hและ rubygems ติดตั้งอย่างถูกต้อง

หมายเหตุเกี่ยวกับการสร้างแพลตฟอร์มที่ไม่ใช่ macOS

หากคุณกำลังสร้างแพลตฟอร์มที่ไม่ใช่ macOS เช่น iOS / tvOS / watchOS การเปลี่ยนแปลงนี้จะพยายามรวม macOS SDK ในแพลตฟอร์มเหล่านั้นทำให้เกิดข้อผิดพลาดในการสร้าง ในการแก้ไขไม่ต้องตั้งค่าCPATHตัวแปรสภาพแวดล้อมในการเข้าสู่ระบบหรือตั้งค่าเป็นชั่วคราวเมื่อทำงานxcodebuildเช่น:

CPATH="" xcodebuild --some-args

2
คุณมีเอกสารใด ๆ เกี่ยวกับ CPATH หรือไม่ การตั้งค่าไม่ได้แก้ปัญหาสำหรับฉัน เมื่อฉันตรวจสอบมันมีค่าในสถานที่แรกมันปรากฏไม่ได้กำหนด
Ilias Karim

1
gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html - คุณอาจต้องค้นหาตัวแปรสภาพแวดล้อมที่แตกต่างกันขึ้นอยู่กับภาษา / คอมไพเลอร์ที่คุณใช้ เป็นเรื่องปกติที่จะไม่มีการตั้งค่าเริ่มต้น
Aaron Brager

และในกรณีที่คุณยังไม่เคยเห็นที่อื่นจะไม่มีช่องว่างในเส้นทาง / ชื่อ Xcode
35499

จากคำตอบทั้งหมดที่นี่นี่เป็นทางออกเดียวที่เหมาะกับฉัน ฉันอยู่และMojave 10.14.6 XCode 11.3.1ขอบคุณมากใช้เวลา 1 วันในการแก้ไขปัญหานี้: /
user2350644

4

ใน Fedora 21 ขึ้นไปคุณเพียงแค่เปิดเทอร์มินัลและติดตั้งไฟล์ Ruby Development เป็นรูท

dnf install ruby-devel



1

ใน Mac 10.14 ดูเหมือนว่าไฟล์ส่วนหัวจะไม่ได้รับการติดตั้งในตำแหน่งที่ถูกต้อง แทนที่จะเปลี่ยนเส้นทางเช่นการแก้ไขอื่น ๆ ฉันสามารถเรียกใช้สิ่งนี้ได้:

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

ทำตามคำแนะนำและแก้ไขปัญหานี้ให้ฉัน


0

คุณต้องติดตั้งทับทิมทั้งหมดไม่ใช่แค่แพ็คเกจขั้นต่ำ คำสั่งที่ถูกต้องที่จะใช้คือ:

sudo apt install ruby-full

คำสั่งต่อไปนี้จะไม่ติดตั้ง ruby ​​ที่สมบูรณ์ด้วย:

sudo apt-get install ruby2.3-dev

0

สำหรับ Ubuntu 18 หลังจากตรวจสอบไฟล์บันทึกที่กล่าวถึงขณะติดตั้ง

ผลลัพธ์บันทึกลงใน /var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out

กับ

less /var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out

ฉันสังเกตเห็นว่าmakeไม่พบ ติดตั้งแล้วทำโดย

sudo apt-get install make

ทุกอย่างทำงานได้


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.