Json gem 'mkmf.rb स्थापित करते समय त्रुटि रूबी के लिए हेडर फाइलें नहीं मिल सकती हैं'


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

आधुनिक युग का अद्यतन, जैसा कि मिमोरिया ने कहा है :

उस स्थिति में जब आप रूबी 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

आपके द्वारा पोस्ट किया गया पहला लिंक बिल्कुल आपका मामला है: कोई रूबी विकास वातावरण स्थापित नहीं है। विकास एनवी को रूबी एक्सटेंशन को संकलित करने की आवश्यकता है, जो ज्यादातर में लिखे गए हैं C। समस्या से प्रॉक्सी का कोई लेना-देना नहीं है: सब कुछ ठीक है, बस संकलन विफल रहता है।

मैं आपको सुझाव दूंगा कि आप लक्षित मशीन पर ruby-dev( ruby-develrpm- आधारित डिस्ट्रोस के लिए) पैकेज स्थापित करें ।

gcc पैकेज की जरूरत हो सकती है

प्रयत्न:

$ sudo apt-get install ruby-dev

या, रेडहत डिस्ट्रो के लिए:

$ sudo yum install ruby-devel

या, [खुले] SuSE के लिए:

$ sudo zypper install ruby-devel

2
धन्यवाद! मेरा मतलब था कि इस सवाल का जवाब मॉड्यूल-विशिष्ट लग रहा था। मैं के बजाय लगता है ruby-devइसकी ruby-devel। यहाँ है जहाँ मैंने पाया कि मुझे वास्तव में क्या चाहिए - digitalocean.com/community/articles/…
Navneet

9
रूबी-डेवेल (फेडोरा 20 पर) स्थापित करने के बाद, मुझे त्रुटि मिली *** extconf.rb विफल ***। आपके द्वारा सुझाए गए तरीके से एक बार gcc स्थापित करने के बाद, सब कुछ ठीक हो गया।
वेन रिस्टरर

आप sudo zypper install ruby-devel
ओपन के

यह उबंटू पर कुछ भी नहीं करता है। अनुपलब्ध पैकेज ruby2.2-dev(या जो भी संस्करण आपने स्थापित किया है)।
लुइस डी सूसा

2
नहींं, इस जवाब से कुछ हल करने में मदद नहीं मिली। सही उत्तर मिमोरेलिया है
लुइस डी सूसा

177

MacOS 10.14 पर Xcode 11 के लिए , यह Xcode स्थापित करने और कमांड-लाइन टूल स्थापित करने और लाइसेंस को स्वीकार करने के बाद भी हो सकता है

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

मुद्दा यह है कि Xcode 11 macOS 10.15 SDK को शिप करता है जिसमें रूबी 2.6 के लिए हेडर शामिल हैं, लेकिन macOS 10.14 के ruby2.3 के लिए नहीं। आप यह सत्यापित कर सकते हैं कि यह आपकी समस्या है

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

जो XOS 11 के साथ macOS 10.14 पर गैर-मौजूद पथ को प्रिंट करता है

/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। अन्य उत्तर में सुझाई गई पुरानी हेडर फ़ाइलों को स्थापित करके सिस्टम निर्देशिका को प्रदूषित करना आवश्यक नहीं है। इसके बजाय, उस एसडीके का चयन करके, उपयुक्त माणिक 2.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काम करना चाहिए जबकि एसडीके का चयन किया जाता है।

वर्तमान Xcode एसडीके पर वापस जाने के लिए, का उपयोग करें

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

14
लीजेंड। ठीक 10.14.6 पर मेरी समस्या। दुःख दो बार नहीं बढ़ सकता।
डिएगो Freniche

2
आप, श्रीमान, एक अस्पष्ट ज्ञान के अधिपति हैं। बहुत धन्यवाद,
रुबिन सिमंस

विस्तृत जानकारी के लिए धन्यवाद! अंत में यह काम किया, "ERROR: jekyll को स्थापित करने में त्रुटि: jyyll-sass- कनवर्टर को Ruby संस्करण> = 2.4.0 की आवश्यकता है।" इससे मुझे हंसी आती है।
निकोले ओल्शेवस्की

@NickolayOlshevsky उस मामले में, आपको होमब्रे के माध्यम से माणिक स्थापित करने की आवश्यकता है, वर्तमान में संस्करण 2.6.5 पर है।
जोकी

1
आप फ्रीकिन कोडिंग किंवदंती।
अलजोशा नोवाकोविच

75

उस स्थिति में जब आप रूबी 2.0 या 2.2 (धन्यवाद @ पेट्रिक-डेवी) या 2.3 (धन्यवाद @juanitofasas) का उपयोग कर रहे हैं।

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-davey E: Unable to locate package ruby2.2-dev E: Couldn't find any package by regex 'ruby2.2-dev'
अपराजित

@ हसन शायद आप एक पुराने उबंटू संस्करण का उपयोग करते हैं। उन्नयन का प्रयास करें।
पिथिकोस

मुझे भी वही त्रुटि मिली, और मैं लिनक्स टकसाल के पूरी तरह से अद्यतन संस्करण का उपयोग कर रहा हूं। मुझे नहीं लगता कि OS वर्जन मुद्दा है।
एंड्रयू फॉल्कनर

2
यदि आप उबंटू के पुराने संस्करण जैसे कि ट्रस्टी (14.04) का उपयोग कर रहे हैं, तो रूबी के लिए ब्राइटबॉक्स PPA जोड़ें:sudo apt-add-repository -y ppa:brightbox/ruby-ng && sudo apt-get update && sudo apt-get install -y ruby2.2-dev
सिद्धू

22

मुझे इस समस्या का भी सामना करना पड़ा, क्योंकि मैं उबंटू के माध्यम से उबंटू पर रूबी स्थापित करता हूं , और मुझे लगा कि रूबी-देव माणिक की सूंड है। इसलिए मैंने इंस्टॉल नहीं किया। Ruby2.3- देव इसे ठीक करता है:

sudo apt-get install ruby2.3-dev

18

मैक ओएस एक्स पर जो लोग इसे प्राप्त कर रहे हैं, उनके लिए आपको XCode कमांड-लाइन टूल को स्थापित करने के लिए निम्न कमांड को चलाने की आवश्यकता हो सकती है, भले ही आपके पास पहले से ही XCode स्थापित हो:

sudo xcode-select --install

साथ ही आपको निम्नलिखित कमांड चलाकर XCode के नियम और शर्तों से सहमत होना चाहिए:

sudo xcodebuild -license

यह मेरे लिए सही उत्तर था। मेरे पास कोई रूबी डेवलपमेंट हेडर नहीं थे। एक बार जब मैंने xCode को स्थापित किया तो मैंने जो मूल कमांड चलाने की कोशिश की, वह काम करने लगी। धन्यवाद!
स्वीट चिली फिल्ली

MoJave के साथ OSX पर मुझे यह चलाना था:su - $USER -c 'xcode-select --install'
Belden

11

मुझे निम्न कमांड को चलाने के लिए एक समान समस्या का सामना करना पड़ा cygwin का उपयोग करना:

$ gem install rerun

मैंने निम्नलिखित साइबर पैकेज स्थापित करके इसे हल किया:

  • माणिक devel
  • libffi-devel
  • जीसीसी कोर
  • जीसीसी-जी ++
  • बनाना
  • 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रास्पबेरी पाई पर
Convid19

11

अधिकांश मतदान समाधान ने मेरी मशीन पर काम नहीं किया (linux mint 18.04)। सावधानीपूर्वक देखने के बाद, मैंने पाया कि जी ++ गायब था। के साथ हल किया

sudo apt-get install जी ++


1
इसने मेरे लिए उबंटू 18.04 पर काम किया। मुझे भी एक sudo apt-get install करना पड़ता है g ++ से पहले काम करने के लिए इंस्टॉल करना होता है।
स्कॉट लिंडनर

स्थापित करने की पुष्टि कर सकते हैं makeऔर g++Ubuntu पर मेरी समस्या 18.04 भी तय कर दी!
अर्धा


5

Xcode 11 / macOS कैटालिना

Xcode 11 / macOS कैटालिना पर, शीर्ष लेख फ़ाइलें अब पुराने स्थान पर नहीं हैं और पुरानी /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgफ़ाइल उपलब्ध नहीं है।

इसके बजाय, हेडर अब /usr/includeवर्तमान एसडीके पथ की निर्देशिका में स्थापित हैं :

/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 को /usr/lib/ruby/ruby.h पर माणिक के लिए हेडर फाइलें नहीं मिल सकती हैं और माणिक ठीक से स्थापित होते हैं।

गैर-macOS प्लेटफार्मों के निर्माण पर ध्यान दें

यदि आप गैर-macOS प्लेटफार्मों, जैसे कि iOS / tvOS / watchOS का निर्माण कर रहे हैं, तो यह परिवर्तन macOS SDK को उन प्लेटफ़ॉर्म में शामिल करने का प्रयास करेगा, जिससे गलतियाँ हो सकती हैं। हल करने के लिए, या तो CPATHलॉगिन पर पर्यावरण चर सेट न करें , या अस्थायी रूप से सेट करें जब xcodebuildऐसा चल रहा हो:

CPATH="" xcodebuild --some-args

2
क्या आपके पास CPATH पर कोई दस्तावेज है? इसे सेट करना मेरे लिए समस्या का समाधान नहीं है। जब मैंने इसकी जाँच की तो इसकी पहली जगह में इसका मूल्य अपरिभाषित दिखाई दिया।
इलियास करीम

1
gcc.gnu.org/oniltocs/cpp/Environment-Variables.html - आपको जिस भाषा / संकलक का उपयोग कर रहे हैं, उसके आधार पर आपको एक अलग वातावरण चर खोजने की आवश्यकता हो सकती है। यह सामान्य है कि यह डिफ़ॉल्ट रूप से
परेशान

और, यदि आपने इसे कहीं और नहीं देखा है, तो Xcode पथ / नाम में रिक्त स्थान नहीं हो सकते हैं
Feldur

यहां सभी उत्तरों से, यह एकमात्र समाधान है जो मेरे लिए काम करता है। मैं पर हूँ Mojave 10.14.6और XCode 11.3.1। बहुत बहुत धन्यवाद, मुझे इसे हल करने के लिए 1 दिन लगा: /
user2350644

4

फेडोरा 21 और ऊपर में, आप बस एक टर्मिनल खोलते हैं और रूबी डेवलपमेंट फ़ाइलों को रूट के रूप में स्थापित करते हैं।

dnf install ruby-devel

2

रूबी-डेवेल स्थापित करने के बाद आपको जीसीसी स्थापित करना पड़ सकता है



1

मैक 10.14 पर, हेडर फाइलें सही जगह पर स्थापित नहीं होती हैं। अन्य फ़िक्सेस की तरह पथ बदलने के बजाय, मैं इसे केवल चलाने में सक्षम था:

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

निर्देशों का पालन करें और इसने मेरे लिए इस समस्या को हल किया।


0

आपको पूरे रूबी को स्थापित करने की आवश्यकता है और न केवल न्यूनतम पैकेज। उपयोग करने के लिए सही कमांड है:

sudo apt install ruby-full

निम्न आदेश भी पूर्ण माणिक स्थापित नहीं करेगा:

sudo apt-get install ruby2.3-dev

0

उबंटू 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

सब कुछ काम कर गया।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.