gem eventmachine致命错误:找不到“ openssl / ssl.h”文件


265

刚刚安装了El Capitan而无法安装gem eventmachine 1.0.7openssl1.0.2a-1。尝试使用,--with-ssl-dir但似乎被忽略了。

也将其报告给他们的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

Answers:


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
如果您将gems设置为您的仓库中的特定目录,即vendor/bundle您将要运行bundle config build.GEMNAME--with-cppflags=-I/usr/local/opt/openssl/include。我必须对宝石运行相同的操作,puma因此我想其他宝石也会发生这种情况。
科尔顿·芬特2015年

4
请参阅来自lloeki的答案:``捆绑配置build.eventmachine --with-cppflags = -I $(brew --prefix openssl)/ include''。那对我有用。不是这个。
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
Ss。Oshiro'9

231

使用捆绑程序和自制软件时:

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

1
对我来说,在此之前,我必须先安装openssl。例如 brew install openssl
Ryan Walls 2015年

这个版本适合我在ruby 2.1.2之上安装eventmachine 1.0.3
dtburgess

太棒了!这也是寻求其他依赖openssl的宝石(例如puma)的方式
morgler

我认为这个答案比已批准的答案要好,因为它用于bundle install执行实际的gem安装,因此可以保证您将安装捆绑软件中指定的确切版本。除非您手动-v x.x.xgem install命令中包括,否则接受的答案将安装最新版本。
埃内斯托

115
brew link --force openssl

然后:

gem install eventmachine

它还可以修复:

  • 宝石安装包
  • 捆绑安装
  • 耙子和铁轨任务

PS可能您需要删除并brew install openssl再次运行

发生问题是因为Apple已从OSX中删除了openssl(在El Captain中构建)


10
确实,这是El Capitan的解决方法。
jhedstrom 2015年

为了澄清起见,冲泡移除/安装/链接的顺序是什么
艾布拉姆(Abram)2015年

7
@Abram如果brew link --force openssl没有效果。然后做brew uninstall opensslbrew install opensslbrew link --force openssl
itsnikolay

这是今天在Mac上的答案(El Capitan,2015-2016)。编辑:只是迫使brew openssl。我不需要指定EventMachine的版本(我正在安装Middleman)。
Ryan Bosinger 2015年

1
也为我工作。好决定。
Kees Briggs

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

原始删除旧宝石并将其重新编译。

cpp标志选项允许编译器找到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为我工作。
Dylanthepiguy

8

如果您要安装EventMachine作为另一个gem的依赖项,请确保在手动安装gem时指定正确的版本:

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

然后,您可以安装最初尝试安装的gem:

gem install mailcatcher


4

一种替代方法是为整个用户个人资料添加捆绑程序配置条目,如下所示:

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

它将在您的主目录中创建一个.bundle / config文件,然后在运行时将其用于所有项目中bundle install



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

注意:-在我能够成功安装该gem之前,我必须做一些事情。这些可能对您适用,因此请在此处列出-

1.)退出企业VPN,否则您可能需要打开代理设置

2.)PKG_CONFIG_PATH设置为-

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

3.)必须在bash_profile的$ PATH中添加以下内容(在我的情况下为〜/ .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位置时。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.