ข้อผิดพลาดร้ายแรงของ gem eventmachine: ไม่พบไฟล์ 'openssl / ssl.h'


265

เพิ่งติดตั้ง El Capitan และไม่สามารถติดตั้งอัญมณีeventmachine 1.0.7ได้ อยู่ที่openssl 1.0.2a-1พยายามใช้--with-ssl-dirแต่ดูเหมือนจะไม่สนใจ

รายงานไปยังrepit GitHubของพวกเขาเช่นกัน

ข้อเสนอแนะใด ๆ ที่ชื่นชมจริงๆ ขอบคุณ

$ 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

คำตอบ:


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

คุณสามารถตั้งค่า Bundler เช่นนี้ได้ แต่ฉันคิดว่ามันผิวเผิน

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

2
สำหรับฉันฉันต้องติดตั้ง openssl ก่อนที่มันจะใช้งานได้ brew install opensslเช่น
Ryan Walls

1
หากคุณมีอัญมณีของคุณตั้งไดเรกทอรีที่ระบุใน repo เช่นของคุณแล้วคุณจะต้องการเรียกใช้vendor/bundle bundle config build.GEMNAME--with-cppflags=-I/usr/local/opt/openssl/includeฉันต้องใช้สิ่งเดียวกันกับพลอยpumaดังนั้นฉันจึงคิดว่าสิ่งนี้จะเกิดขึ้นกับอัญมณีอื่นด้วย
Colton Fent

4
ดูคำตอบด้วย: 'มัด config build.eventmachine - ด้วย -cppflags = -I $ (ชง - คำนำหน้า openssl) / รวม' จาก lloeki ที่ทำงานให้ฉัน ไม่ใช่อันนี้.
justingordon

2
สิ่งนี้ใช้ได้กับฉันgem install eventmachine -v 1.0.8 -- --with-cppflags=-I/usr/local/opt/openssl/includeใน OSX El Capitan 10.11.5
Jagdeep Singh

สำหรับฉันหลังจากติดตั้งbrew install opensslฉันต้องทำbrew link openssl --force
Sr. Oshiro

231

เมื่อใช้ bundler และ homebrew:

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

1
สำหรับฉันฉันต้องติดตั้ง openssl ก่อนที่มันจะใช้งานได้ เช่น brew install openssl
Ryan Walls

รุ่นนี้ทำงานสำหรับฉันที่จะติดตั้ง eventmachine 1.0.3 ด้านบนของทับทิม 2.1.2
dtburgess

Fantastic! นี่เป็นวิธีที่จะไปหาอัญมณีอื่น ๆ (เช่น puma) ที่ขึ้นอยู่กับ openssl
morgler

ฉันคิดว่าคำตอบนี้ดีกว่าคำตอบที่ได้รับการอนุมัติเพราะมันใช้bundle installเพื่อทำการติดตั้งพลอยจริงมันรับประกันได้ว่าคุณจะติดตั้งเวอร์ชั่นที่แน่นอนที่ระบุในบันเดิลของคุณ คำตอบที่ยอมรับจะติดตั้งเวอร์ชันล่าสุดยกเว้นว่าคุณได้รวมคำสั่งไว้-v x.x.xในgem installคำสั่งด้วยตนเอง
Ernesto

115
brew link --force openssl

แล้ว:

gem install eventmachine

นอกจากนี้ยังแก้ไข:

  • อัญมณีติดตั้ง taks
  • กำติดตั้ง
  • งานคราดและราง

PS อาจเป็นไปได้ว่าคุณจะต้องลบและเรียกใช้brew install opensslอีกครั้ง

ปัญหานี้เกิดขึ้นเนื่องจาก Apple ได้ลบ openssl ออกจาก OSX (ใน El Captain build)


10
นี่เป็นการแก้ไขที่ El Capitan อย่างแน่นอน
jhedstrom

เพื่อความกระจ่างคำสั่งของการชงลบ / ติดตั้ง / เชื่อมโยงคืออะไร
Abram

7
@Abram ในกรณีที่brew link --force opensslไม่มีผลกระทบ แล้วทำbrew uninstall openssl, brew install openssl,brew link --force openssl
itsnikolay

นี่คือคำตอบสำหรับ Mac วันนี้ (El Capitan, 2015-2016) แก้ไข: เพียงบังคับให้เปิด openssl ฉันไม่จำเป็นต้องระบุเวอร์ชันของ EventMachine (ฉันกำลังติดตั้ง Middleman)
Ryan Bosinger

1
ทำงานให้ฉันเช่นกัน โทรดีมาก
Kees Briggs

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

อันบริสุทธิ์ลบอัญมณีเก่าและ recompiles มัน

ตัวเลือกแฟล็ก cpp อนุญาตให้คอมไพเลอร์ค้นหาส่วนหัว openssl

คุณยังสามารถเพิ่มเวอร์ชันได้หากต้องการ:

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

1
ทำไมpristineแทนinstall?
Ricardo Freitas

4
gem install eventmachine -- --with-cppflags=-I/usr/local/opt/openssl/includeทำงานให้ฉัน
Dylanthepiguy

8

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

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

จากนั้นคุณสามารถติดตั้งอัญมณีที่คุณพยายามจะติดตั้งในตอนแรก:

gem install mailcatcher

8

ฉันพยายามติดตั้ง v 1.0.3 และมันใช้งานได้สำหรับฉัน

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

การสนทนาเหล่านี้มีประโยชน์มาก https://github.com/eventmachine/eventmachine/issues/602


2
คุณจำเป็นต้องมี hypen I/usr/local/opt/openssl/includeก่อน มันเป็นตัวละครตัวหนึ่งดังนั้น stackoverflow จึงไม่ยอมให้ฉันแก้ไข
MaicolBen

1
แก้ไขมัน @MaicolBen
blockloop

4

อีกทางเลือกหนึ่งคือการเพิ่มรายการกำหนดค่า Bundler สำหรับโปรไฟล์ผู้ใช้ทั้งหมดของคุณเช่นนี้

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

มันจะสร้างไฟล์. bundle / config ในโฮมไดเร็กตอรี่ของคุณ, ซึ่งจะถูกใช้ในโครงการของคุณทั้งหมดเมื่อคุณรันbundle install.


4

วิธีนี้แก้ไขปัญหาสำหรับฉัน:

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

ที่มา: https://github.com/sj26/mailcatcher/issues/254


มีความซับซ้อนเกินเหตุเหตุใดจึงไม่ควรตั้งค่า var: export PKG_CONFIG_PATH = $ (brew --prefix openssl) / lib / pkgconfig # ตอนนี้คุณสามารถติดตั้งแพ็คเกจเพิ่มไปยัง. bashrc หรือสิ่งที่คุณใช้
Gerry Gleason

0

สิ่งนี้ใช้ได้กับฉัน -

    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

บันทึก:-ก่อนที่ฉันจะสามารถติดตั้งอัญมณีนี้ได้สำเร็จฉันต้องทำบางสิ่ง สิ่งเหล่านี้อาจนำไปใช้กับคุณดังนั้นรายการพวกเขาที่นี่ -

1. ) ปิดใช้งาน corporate-VPN หรือคุณอาจต้องเปิดการตั้งค่าพร็อกซี

2. ) PKG_CONFIG_PATH ถูกตั้งค่าเป็น -

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

3. ) ต้องเพิ่มรายการต่อไปนี้ใน $ PATH ใน bash_profile (ในกรณีของฉัน ~ / .zshrc)

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

4. ) โปรดทราบด้วยว่าในทางตรงกันข้ามกับคำตอบบางอย่างที่ฉันได้รับในโพสต์ SO นี้และด้ายนี้ในgithub-eventmachineฉันไม่สามารถติดตั้งได้eventmachine

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.

ดูเหมือนว่า/usr/local/opt/openssl/includeเป็นตำแหน่งที่ถูกต้องและไม่ใช่/usr/local/includeเมื่อระบุตำแหน่ง openssl

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