修订后的问题:
我应该怎样在我的OS X Yosemite(10.10.1)系统上安装puma gem?我已经尝试了很多方法(我有XCode工具,我有OpenSSL),但是在构建本地扩展时仍然失败。
问题描述
在我的OS X系统上,当我执行以下命令:
$ gem install puma
I get:
Building native extensions. This could take a while...
ERROR: Error installing puma:
ERROR: Failed to build gem native extension.
/Users/home/sandbox/usr/bin/ruby extconf.rb
checking for SSL_CTX_new() in -lssl... no
checking for SSL_CTX_new() in -lssleay32... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
Provided configuration options:
--with-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/Users/home/sandbox/usr/bin/ruby
--with-puma_http11-dir
--without-puma_http11-dir
--with-puma_http11-include
--without-puma_http11-include=${puma_http11-dir}/include
--with-puma_http11-lib
--without-puma_http11-lib=${puma_http11-dir}/lib
--with-ssllib
--without-ssllib
--with-ssleay32lib
--without-ssleay32lib
extconf failed, exit code 1
Gem files will remain installed in /Users/home/sandbox/usr/lib/ruby/gems/2.1.0/gems/puma-2.10.2 for inspection.
Results logged to /Users/home/sandbox/usr/lib/ruby/gems/2.1.0/extensions/x86_64-darwin-14/2.1.0/puma-2.10.2/gem_make.out
环境
我怀疑gem install
无法定位SSL头文件和/或库。以下是我的系统信息(请注意,~/sandbox/usr是我的“沙盒”目录,包含我用于Ruby on Rails开发的所有可执行文件、库、头文件等)。请注意,“ssl.h”确实定义了SSL_CTX_new():
$ which openssl
~/sandbox/usr/bin/openssl
$ openssl version
OpenSSL 1.0.1j 15 Oct 2014
$ openssl version -d
OPENSSLDIR: "/Users/home/sandbox/usr/ssl"
$ find ~/sandbox/usr -name "*libssl*" -print
~/sandbox/usr/lib/libssl.a
$ find ~/sandbox/usr -name "*.h" -exec grep SSL_CTX_new {} /dev/null \;
~/sandbox/usr/include/openssl/ssl.h:SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth);
此外,以下是Ruby的编译过程。$INSTALL_DIR为~/home/sandbox:
./configure --prefix=$(INSTALL_DIR) --enable-shared --disable-install-doc --with-opt-dir=$(INSTALL_DIR) --with-openssl-dir=$(INSTALL_DIR)/bin; where INSTALL_DIR is ~/sandbox/usr.
问题
我是否只是错过了构建过程的某些配置标志?我已经试过一堆标志,更多或更少地随意尝试:
$ gem install puma -- --with-openssl-dir=/Users/home/sandbox/usr/ssl
$ gem install puma -- --with-ssllib=/Users/home/sandbox/usr/lib/libssl.a
$ gem install puma -- --with-ssl=/Users/home/sandbox/usr/bin/openssl
$ gem install puma -- --with-ssl=/Users/home/sandbox/usr/bin
$ gem install puma -- --with-opt-dir=/Users/home/sandbox/usr
但是在每种情况下都遇到了相同的错误。有人可以告诉我错过了什么吗?
更多信息...
带有错误的mkmf.log文件如下所示(为了易读性添加了换行符):
"clang -o conftest
-I/Users/home/sandbox/usr/include/ruby-2.1.0/x86_64-darwin14.0
-I/Users/home/sandbox/usr/include/ruby-2.1.0/ruby/backward
-I/Users/home/sandbox/usr/include/ruby-2.1.0
-I.
-I/Users/home/sandbox/usr/include
-D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT
-O3 -fno-fast-math -ggdb3 -Wall -Wextra
-Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers
-Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement
-Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wextra-tokens
-fno-common -pipe conftest.c
-L.
-L/Users/home/sandbox/usr/lib
-L/Users/home/sandbox/usr/lib
-L. -fstack-protector
-L/Users/home/sandbox/usr/lib
-lruby.2.1.0 -lssl -lpthread -ldl -lobjc "
conftest.c:13:57: error: use of undeclared identifier 'SSL_CTX_new'
int t(void) { void ((*volatile p)()); p = (void ((*)()))SSL_CTX_new; return 0; }
当我在沙盒目录树中查找时,唯一定义SSL_CTX_new的头文件是
~/sandbox/include/openssl/ssl.h
。看起来这个文件没有被包含进去,目前我不知道为什么。