фатальна помилка gem eventmachine: файл 'openssl / ssl.h' не знайдено


265

Щойно встановлений El Capitan і не може встановити дорогоцінний камінь eventmachine 1.0.7. opensslє в 1.0.2a-1. Намагався використовувати, --with-ssl-dirале, здається, проігнорував.

Про це повідомили також у їхньому github repo .

Будь-які пропозиції дуже вдячні. Дякую.

$ 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

Ви також можете налаштувати такий постачальник, але я думаю, що це поверхово

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

2
Для мене мені довелося спочатку встановити openssl, перш ніж це спрацювало. напр brew install openssl.
Райан

1
Якщо у вас є ваші дорогоцінні камені, встановлені у певному каталозі репо, тобто vendor/bundleтоді ви хочете запустити bundle config build.GEMNAME--with-cppflags=-I/usr/local/opt/openssl/include. Мені довелося запустити те ж саме з дорогоцінним каменем, pumaтак що я думаю, що це відбувається і для інших самоцвітів.
Колтон Фент

4
див. відповідь з: 'bundle config build.eventmachine --with-cppflags = -I $ (brew - префікс 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
сестра Ошіро

231

Під час використання пакета та домашнього перекладу:

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

1
Для мене мені довелося спочатку встановити openssl, перш ніж це спрацювало. наприклад brew install openssl
Ryan Walls

Ця версія працювала для мене, щоб встановити eventmachine 1.0.3 поверх ruby ​​2.1.2
dtburgess

Фантастичний! Це також шлях до інших дорогоцінних каменів (наприклад, puma), які залежать від openssl
morgler

Я думаю, що ця відповідь краща за затверджену, оскільки, оскільки вона використовується bundle installдля фактичної установки дорогоцінного каміння, вона гарантує встановлення точної версії, вказаної у вашому пакеті. Прийнятий відповідь буде встановити останню версію, якщо не включати -v x.x.xв gem installкоманді вручну.
Ернесто

115
brew link --force openssl

Тоді:

gem install eventmachine

Він також виправляє:

  • встановити gem taks
  • встановити пакет
  • завдання граблі та рейки

PS Напевно вам потрібно буде видалити та запустити brew install opensslзнову

Проблема виникає тому, що Apple видалила openssl з OSX (у складі El Captain)


10
Це справді було виправданням Ель-Капітана.
jhedstrom

Для з'ясування, що порядок заварних видалити / встановити / посилання
Абрам

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).
Райан Бозінгер

1
Працював і для мене. Гарний дзвінок.
Кіс Бріггс

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

незайманий видаляє старий дорогоцінний камінь і перекомпілює його.

Параметр cpp flags дозволяє компілятору знаходити заголовки openssl.

Ви також можете додати версію, якщо вам подобається:

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

1
чому pristineзамість install?
Рікардо Фрейтас

4
gem install eventmachine -- --with-cppflags=-I/usr/local/opt/openssl/includeпрацював на мене.
Ділантепігуй

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/isissue/602


2
Раніше вам потрібна гіпена I/usr/local/opt/openssl/include. Це один персонаж, тому stackoverflow не дозволяє мені його редагувати
MaicolBen

1
Виправлено @MaicolBen
blockloop

4

Одна з альтернатив - додати запис конфігурації постачальника для всього профілю користувача, наприклад:

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/isissue/254


Unecessarily складно, чому б не просто встановити вар: експорт PKG_CONFIG_PATH = $ (заварити --prefix OpenSSL) / Бібліотека / pkg-config # тепер ви можете встановити будь-які пакети, додайте до .bashrc, або те , що ви використовуєте
Gerry Глисона

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.) вийшов з корпоративного 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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.