gem eventmachine lỗi nghiêm trọng: không tìm thấy tệp 'openssl / ssl.h'


265

Chỉ cần cài đặt El Capitan và không thể cài đặt đá quý eventmachine 1.0.7. openssllà tại 1.0.2a-1. Đã thử sử dụng --with-ssl-dirnhưng dường như bỏ qua.

Báo cáo nó với repo github của họ là tốt.

Bất kỳ đề xuất đều thực sự được đánh giá cao. Cảm ơn.

$ ls /usr/local/Cellar/openssl/1.0.2a-1/include/openssl/ssl.h
/usr/local/Cellar/openssl/1.0.2a-1/include/openssl/ssl.h

$ gem install eventmachine -v '1.0.7' -- --with-ssl-dir=/usr/local/Cellar/openssl/1.0.2a-1/include
/Users/pain/.rbenv/versions/2.1.2/bin/ruby -r ./siteconf20150612-56154-1hsjz2n.rb extconf.rb --with-ssl-dir=/usr/local/Cellar/openssl/1.0.2a-1/include
checking for rb_trap_immediate in ruby.h,rubysig.h... no
checking for rb_thread_blocking_region()... yes
checking for ruby/thread.h... yes
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
checking for inotify_init() in sys/inotify.h... no
checking for __NR_inotify_init in sys/syscall.h... no
checking for writev() in sys/uio.h... yes
checking for rb_thread_fd_select()... yes
checking for rb_fdset_t in ruby/intern.h... yes
checking for rb_wait_for_single_fd()... yes
checking for rb_enable_interrupt()... no
checking for rb_time_new()... yes
checking for sys/event.h... yes
checking for sys/queue... yes
checking for clock_gettime()... no
checking for gethrtime()... no
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling binder.cpp
In file included from binder.cpp:20:
./project.h:116:10: fatal error: 'openssl/ssl.h' file not found
#include <openssl/ssl.h>
         ^
1 error generated.
make: *** [binder.o] Error 1

make failed, exit code 2

Câu trả lời:


513
$ gem install eventmachine -- --with-cppflags=-I/usr/local/opt/openssl/include                                                                                                             
Building native extensions with: '--with-cppflags=-I/usr/local/opt/openssl/include'
This could take a while...
Successfully installed eventmachine-1.0.8
1 gem installed

Bạn cũng có thể thiết lập trình đóng gói như thế này nhưng tôi nghĩ đó là bề ngoài

bundle config build.eventmachine --with-cppflags=-I/usr/local/opt/openssl/include

2
Đối với tôi, tôi đã phải cài đặt openssl trước khi nó hoạt động. ví dụ brew install openssl.
Ryan Walls

1
Nếu bạn có đá quý của bạn được đặt thành một thư mục cụ thể trong repo của bạn, tức là vendor/bundlebạn sẽ muốn chạy bundle config build.GEMNAME--with-cppflags=-I/usr/local/opt/openssl/include. Tôi đã phải chạy điều tương tự với đá quý pumavì vậy tôi tưởng tượng điều này cũng xảy ra với các loại đá quý khác.
Colton Fent

4
xem câu trả lời với: 'bundle config build.eventmachine --with-cppflags = -I $ (brew --prefix openssl) / bao gồm' từ lloeki. Điều đó làm việc cho tôi. Không phải cái này.
justingordon

2
Điều này làm việc cho tôi gem install eventmachine -v 1.0.8 -- --with-cppflags=-I/usr/local/opt/openssl/includetrên OSX El Capitan 10.11.5
Jagdeep Singh

Đối với tôi sau khi cài đặt, brew install openssltôi phải làmbrew link openssl --force
Sr. Oshiro

231

Khi sử dụng bundler và homebrew:

$ bundle config build.eventmachine --with-cppflags=-I$(brew --prefix openssl)/include
$ bundle install

1
Đối với tôi, tôi đã phải cài đặt openssl trước khi nó hoạt động. ví dụ brew install openssl
Ryan Tường

Phiên bản này hoạt động với tôi để cài đặt eventmachine 1.0.3 trên đỉnh ruby ​​2.1.2
dtburgess

Tuyệt diệu! Đây cũng là cách để tìm kiếm các loại đá quý khác (ví dụ như puma) phụ thuộc vào openssl
morgler

Tôi nghĩ rằng câu trả lời này tốt hơn câu trả lời đã được phê duyệt, vì nó sử dụng bundle installđể thực hiện cài đặt đá quý thực tế, nó đảm bảo bạn sẽ cài đặt phiên bản chính xác được chỉ định trong gói của bạn. Câu trả lời được chấp nhận sẽ cài đặt phiên bản mới nhất, trừ khi bạn bao gồm -v x.x.xtrong gem installlệnh bằng tay.
Ernesto

115
brew link --force openssl

Sau đó:

gem install eventmachine

Nó cũng sửa:

  • đá quý cài đặt taks
  • cài đặt gói
  • nhiệm vụ cào và ray

PS Có lẽ bạn sẽ cần phải gỡ bỏ và chạy brew install openssllại

Vấn đề xảy ra vì Apple đã loại bỏ openssl khỏi OSX (trong bản dựng El Captain)


10
Đây thực sự là bản sửa lỗi trên El Capitan.
jhedstrom

Để làm rõ, thứ tự của brew remove / install / link là gì
Abram

7
@ Abram Trong trường hợp brew link --force opensslkhông có hiệu lực. Sau đó làm brew uninstall openssl, brew install openssl,brew link --force openssl
itsnikolay

Đây là câu trả lời trên máy Mac ngày hôm nay (El Capitan, 2015-2016). EDIT: Chỉ buộc các open opens. Tôi không cần chỉ định phiên bản EventMachine (Tôi đã cài đặt Middman).
Ryan Bosinger 7/12/2015

1
Làm việc cho tôi là tốt. Cuộc gọi tốt
Kees Briggs

13
gem pristine eventmachine -- --with-cppflags=-I/usr/local/opt/openssl/include

nguyên sơ loại bỏ đá quý cũ và biên dịch lại nó.

Tùy chọn cờ cpp cho phép trình biên dịch tìm các tiêu đề openssl.

Bạn cũng có thể thêm phiên bản nếu bạn thích:

gem pristine eventmachine -v '1.0.4' -- --with-cppflags=-I/usr/local/opt/openssl/include

1
Tại sao pristinethay vì install?
Ricardo Freitas

4
gem install eventmachine -- --with-cppflags=-I/usr/local/opt/openssl/includeđã làm cho tôi.
Dylanthepiguy

8

Nếu bạn đang cài đặt EventMachine như một phần phụ thuộc của một loại đá quý khác, hãy đảm bảo chỉ định phiên bản chính xác khi bạn cài đặt đá quý theo cách thủ công:

gem install eventmachine -v 1.0.5 -- --with-cppflags=-I$(brew --prefix openssl)/include

Sau đó, bạn có thể cài đặt đá quý mà ban đầu bạn đang cố cài đặt:

gem install mailcatcher

8

Tôi đã cố gắng cài đặt phiên bản 1.0.3 và điều này đã làm việc cho tôi.

gem install eventmachine -v '1.0.3' -- --with-cppflags=-I/usr/local/opt/openssl/include

Những cuộc thảo luận này rất hữu ích. https://github.com/eventmachine/eventmachine/issues/602


2
Bạn cần một hypen trước I/usr/local/opt/openssl/include. Đó là một nhân vật nên stackoverflow không cho phép tôi chỉnh sửa nó
MaicolBen

1
Đã sửa lỗi @MomsolBen
blockloop

4

Một cách khác là thêm một mục cấu hình gói cho toàn bộ hồ sơ người dùng của bạn, như thế này:

cd ~
bundle config build.eventmachine --with-cppflags=-I$(brew --prefix openssl)/include

nó sẽ tạo một tệp .bundle / config trong thư mục chính của bạn, tệp này sẽ được sử dụng trong tất cả các dự án của bạn khi bạn chạy bundle install.


4

Điều này giải quyết các vấn đề đối với tôi:

PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" gem install eventmachine -v "1.0.8"

Nguồn: https://github.com/sj26/mailcatcher/issues/254


Phức tạp không cần thiết, tại sao không chỉ đặt var: export PKG_CONFIG_PATH = $ (brew --prefix openssl) / lib / pkgconfig # bây giờ bạn có thể cài đặt bất kỳ gói nào, thêm vào .bashrc hoặc những gì bạn sử dụng
Gerry Glory

0

Điều này làm việc cho tôi -

    gem install eventmachine -v '1.0.7' -- --debug --backtrace --with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib
    Building native extensions with: '--debug --backtrace --with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib'
    This could take a while...
    Successfully installed eventmachine-1.0.7
    Parsing documentation for eventmachine-1.0.7
    Installing ri documentation for eventmachine-1.0.7
    Done installing documentation for eventmachine after 9 seconds
    1 gem installed

GHI CHÚ:- Trước khi tôi có thể cài đặt thành công viên ngọc này, tôi đã phải làm một vài điều. Chúng có thể áp dụng cho bạn, vì vậy hãy liệt kê chúng ở đây -

1.) đã tắt VPN công ty HOẶC bạn có thể phải BẬT cài đặt proxy

2.) PKG_CONFIG_PATH được đặt thành -

echo $PKG_CONFIG_PATH
/usr/local/opt/openssl/lib/pkgconfig

3.) đã phải thêm đoạn sau vào $ PATH trong bash_profile (trong trường hợp của tôi ~ / .zshrc)

export PATH="/usr/local/opt/openssl/bin:$PATH"

4.) Cũng lưu ý rằng, trái với một số câu trả lời tôi nhận được trong bài viết SO này và chủ đề này trên github-eventmachine , tôi không thể cài đặteventmachine

gem install eventmachine -v '1.0.7' -- --debug --backtrace --with-cppflags=-I/usr/local/include --with-ldflags=-L/usr/local/lib
Fetching: eventmachine-1.0.7.gem (100%)
Building native extensions with: '--debug --backtrace --with-cppflags=-I/usr/local/include --with-ldflags=-L/usr/local/lib'
This could take a while...
ERROR:  Error installing eventmachine:
    ERROR: Failed to build gem native extension.

Có vẻ như /usr/local/opt/openssl/includelà vị trí phù hợp và không phải /usr/local/includekhi chỉ định vị trí openssl.

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.