Lỗi trong khi cài đặt json gem 'mkmf.rb không thể tìm thấy tệp tiêu đề cho ruby'


407

Đối với bối cảnh, nó trên một máy chủ từ xa có tường lửa. Tôi đang thiết lập môi trường của mình thông qua proxy. Tôi có ruby 1.8.7. Khi tôi cố gắng cài đặt đá quý ..

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

Tôi nhận được lỗi sau đây:

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

Vì tôi không chắc vấn đề là gì, tôi đã googled và tìm thấy những

Có gợi ý nào không? Cảm ơn!


kiểm tra /usr/lib/ruby/ruby.htập tin của tập tin, nếu nó có mặt, hiển thị cho chúng tôi thông báo lỗi từ gem_make.out.
Малъ Скрылевъ

Câu trả lời:


785

Cập nhật thời đại hiện đại, như tuyên bố của mimoralea :

Trong trường hợp bạn đang sử dụng ruby ​​2.0 hoặc 2.2 (cảm ơn @ patrick-davey).

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

hoặc, cách chung chung:

sudo apt-get install ruby-dev

hoặc là

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

Liên kết đầu tiên bạn đã đăng chính xác là trường hợp của bạn: không có môi trường phát triển ruby ​​nào được cài đặt. Phát triển env là cần thiết để biên dịch các phần mở rộng của ruby, phần lớn được viết bằng C. Proxy không liên quan gì đến vấn đề: mọi thứ đều được tải xuống tốt, chỉ là quá trình biên dịch thất bại.

Tôi sẽ đề nghị bạn cài đặt gói ruby-dev( ruby-develcho các bản phân phối dựa trên vòng / phút) vào máy mục tiêu của bạn.

gcc gói có thể là cần thiết là tốt.

Thử:

$ sudo apt-get install ruby-dev

Hoặc, cho Redhat distro:

$ sudo yum install ruby-devel

Hoặc, cho [mở] SuSE:

$ sudo zypper install ruby-devel

2
Cảm ơn! Tôi có nghĩa là câu trả lời trong câu hỏi đó có vẻ như mô-đun cụ thể. Tôi nghĩ rằng thay vì ruby-devruby-devel. Đây là nơi tôi tìm thấy những gì tôi cần chính xác - digitalocean.com/community/articles/ từ
Navneet 13/12/13

9
Sau khi cài đặt ruby-devel (trên Fedora 20), tôi đã gặp lỗi *** extconf.rb không thành công ***. Sau khi cài đặt gcc như bạn đề xuất, mọi thứ đều hoạt động tốt.
Wayne Riesterer

Bạn có thể thêm sudo zypper install ruby-develcho openSUSE
superbob

Điều này không có gì trên Ubuntu. Gói bị thiếu là ruby2.2-dev(hoặc bất kỳ phiên bản nào bạn đã cài đặt).
Luís de Sousa

2
Không, câu trả lời này không giúp giải quyết bất cứ điều gì. Câu trả lời đúng là của mimoralea .
Luís de Sousa

177

Đối với Xcode 11 trên macOS 10.14 , điều này có thể xảy ra ngay cả sau khi cài đặt Xcode và cài đặt các công cụ dòng lệnh và chấp nhận giấy phép với

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

Vấn đề là Xcode 11 vận chuyển SDK macOS 10.15 bao gồm các tiêu đề cho ruby2.6, nhưng không phải cho ruby2.3 của macOS 10.14. Bạn có thể xác minh rằng đây là vấn đề của bạn bằng cách chạy

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

mà trên macOS 10.14 với Xcode 11 in đường dẫn không tồn tại

/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

Tuy nhiên, Xcode 11 cài đặt SDK macOS 10.14 bên trong /Library/Developer/CommandLineTools/SDKs/MacOS10.14.sdk. Không cần thiết phải làm ô nhiễm các thư mục hệ thống bằng cách cài đặt các tệp tiêu đề cũ như được đề xuất trong các câu trả lời khác. Thay vào đó, bằng cách chọn SDK đó, các tiêu đề ruby2.3 thích hợp sẽ được tìm thấy:

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

Điều này bây giờ nên in chính xác

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

Tương tự, gem installnên hoạt động trong khi SDK đó được chọn.

Để quay lại SDK Xcode hiện tại, hãy sử dụng

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

14
Huyền thoại. Chính xác là vấn đề của tôi ngày 10.14.6. Buồn không thể upvote hai lần.
Diego Freniche

2
Bạn, thưa ngài, là một lớp phủ kiến ​​thức tối nghĩa. Rất cám ơn,
Rubin Simons

Cảm ơn bạn đã thông tin chi tiết! Cuối cùng nó cũng hoạt động, tạo ra "LRI: Lỗi khi cài đặt jekyll: jekyll-sass-convert yêu cầu phiên bản Ruby> = 2.4.0.". Điều đó làm tôi cười.
Nickolay Olshevsky

@NickolayOlshevsky trong trường hợp đó, bạn cần cài đặt ruby ​​qua homebrew, hiện tại phiên bản 2.6.5.
joki

1
Bạn freakin huyền thoại mã hóa.
Aljosha Novakovic

75

Trong trường hợp bạn đang sử dụng ruby ​​2.0 hoặc 2.2 (cảm ơn @ patrick-davey) hoặc 2.3 (cảm ơn @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

Và bạn có được mô hình ở đây ...


6
Hoặc, nếu bạn đang sử dụng 2.2 ...sudo apt-get install ruby2.2-dev
patrickdavey

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

@dson có lẽ bạn sử dụng phiên bản Ubuntu cũ. Hãy thử nâng cấp.
Pithikos

Tôi cũng gặp lỗi tương tự và tôi đang sử dụng phiên bản Linux Mint được cập nhật đầy đủ. Tôi không nghĩ rằng bản án hệ điều hành là vấn đề.
Andrew Faulkner

2
Nếu bạn đang sử dụng phiên bản Ubuntu cũ như Trusty (14.04), hãy thêm PPA hộp sáng cho Ruby:sudo apt-add-repository -y ppa:brightbox/ruby-ng && sudo apt-get update && sudo apt-get install -y ruby2.2-dev
Siddhu


19

Đối với những người đang nhận được điều này trên Mac OS X, bạn có thể cần chạy lệnh sau để cài đặt các công cụ dòng lệnh XCode, ngay cả khi bạn đã cài đặt XCode:

sudo xcode-select --install

Ngoài ra, bạn phải đồng ý các điều khoản và điều kiện của XCode bằng cách chạy lệnh sau:

sudo xcodebuild -license

Đây là câu trả lời chính xác cho tôi. Tôi không có tiêu đề phát triển Ruby. Khi tôi cài đặt xCode, lệnh ban đầu tôi đã thử chạy. Cảm ơn!
Sweet Chilly Philly

Trên OSX với Mojave, tôi phải chạy nó như sau:su - $USER -c 'xcode-select --install'
Belden

Điều này làm việc cho tôi quá.
khó khăn

11

Tôi gặp vấn đề tương tự khi sử dụng cygwin để chạy lệnh sau:

$ gem install rerun

Tôi đã giải quyết nó bằng cách cài đặt các gói cygwin sau:

  • ruby-devel
  • libffi-phát
  • lõi gcc
  • gcc-g ++
  • làm
  • tự động1.15

Sự phân biệt này đối với tôi:/cygdrive/z/.gem/ruby/extensions/x86-cygwin/json-1.8.3/json/ext/parser.so: [BUG] Segmentation fault at 0x0001b8
rr-

Giải quyết bằng cách làm rm -rf ~/.gem/và phát hành lại lệnh.
rr-

ruby-devtrên mâm xôi pi
CONvid19

11

Hầu hết các giải pháp được bình chọn không hoạt động trên máy của tôi (linux mint 18.04). Sau khi xem xét cẩn thận, tôi thấy rằng g ++ đã bị mất. Giải quyết với

sudo apt-get cài đặt g ++


1
Điều này làm việc cho tôi trên Ubuntu 18.04. Tôi cũng đã phải thực hiện cài đặt sudo apt-get trước khi cài đặt g ++ để hoạt động.
Scott Lindner

Có thể xác nhận cài đặt makeg++khắc phục sự cố của tôi trên Ubuntu 18.04!
Arda

9

trong trường hợp bạn sử dụng SUSE

sudo yast2 -i ruby-devel

2
Tôi thích sudo zypper in ruby-devel.
Lesik2008

5

Xcode 11 / macOS Catalina

Trên Xcode 11 / macOS Catalina, các tệp tiêu đề không còn ở vị trí cũ và /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgtệp cũ không còn khả dụng.

Thay vào đó, các tiêu đề hiện được cài đặt vào /usr/includethư mục của đường dẫn SDK hiện tại:

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

Hầu hết các thư mục này có thể được tìm thấy bằng cách sử dụng đầu ra của xcrun --show-sdk-path. Và nếu bạn thêm đường dẫn này vào CPATHbiến môi trường, thì xây dựng các tập lệnh (bao gồm cả các tập lệnh được gọi thông qua bundle) thường sẽ có thể tìm thấy nó.

Tôi đã giải quyết điều này bằng cách đặt tệp CPATHtrong .zshrctệp của mình :

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

Sau khi mở một vỏ mới (hoặc đang chạy source .zshrc), tôi không còn nhận được thông báo lỗi mkmf.rb không thể tìm thấy các tệp tiêu đề cho ruby ​​tại /usr/lib/ruby/ruby.h và rubygems cài đặt đúng cách.

Lưu ý khi xây dựng các nền tảng không phải là macOS

Nếu bạn đang xây dựng các nền tảng không phải là macOS, chẳng hạn như iOS / tvOS / watchOS, thay đổi này sẽ cố gắng đưa SDK macOS vào các nền tảng đó, gây ra lỗi xây dựng. Để giải quyết, không đặt CPATHbiến môi trường khi đăng nhập hoặc tạm thời đặt nó thành trống khi chạy xcodebuildnhư vậy:

CPATH="" xcodebuild --some-args

2
Bạn có tài liệu nào về CPATH không? Đặt nó không phải là giải quyết vấn đề cho tôi. Khi tôi kiểm tra giá trị của nó ở vị trí đầu tiên, nó xuất hiện không xác định.
Ilias Karim

1
gcc.gnu.org/onlinesocs/cpp/Envir-Variabled.html - bạn có thể cần tìm một biến môi trường khác nhau tùy thuộc vào ngôn ngữ / trình biên dịch bạn đang sử dụng. Theo mặc định, nó sẽ không được đặt mặc định
Aaron Brager

Và, trong trường hợp bạn chưa thấy nó ở nơi khác, không thể có khoảng trắng trong đường dẫn / tên Xcode
Feldur

Từ tất cả các câu trả lời ở đây, đây là giải pháp duy nhất hiệu quả với tôi. Tôi đang trên Mojave 10.14.6XCode 11.3.1. Cảm ơn bạn rất nhiều, tôi đã mất 1 ngày để giải quyết vấn đề này: /
user2350644

4

Trong Fedora 21 trở lên, bạn chỉ cần mở một thiết bị đầu cuối và cài đặt các tệp Ruby Development làm root.

dnf install ruby-devel

2

Bạn có thể cần cài đặt gcc sau khi cài đặt ruby-devel


1

Xcode -> Tùy chọn -> Vị trí

thay đổi công cụ dòng lệnh thành Xcode 11.2.1


1

Trên Mac 10.14, các tệp tiêu đề dường như không được cài đặt đúng chỗ. Thay vì thay đổi đường dẫn như các bản sửa lỗi khác, tôi chỉ có thể chạy nó:

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

Thực hiện theo các hướng dẫn và nó đã giải quyết vấn đề này cho tôi.


0

Bạn cần cài đặt toàn bộ ruby ​​và không chỉ gói tối thiểu. Lệnh chính xác để sử dụng là:

sudo apt install ruby-full

Lệnh sau cũng sẽ không cài đặt một viên ruby ​​hoàn chỉnh:

sudo apt-get install ruby2.3-dev

0

Đối với Ubuntu 18, sau khi kiểm tra tệp nhật ký được đề cập trong khi cài đặt

Kết quả được ghi vào /var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out

với

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

Tôi nhận thấy rằng makekhông tìm thấy. Vì vậy, cài đặt thực hiện bởi

sudo apt-get install make

mọi thứ đã làm việc


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.