问题描述
我已经安装了libssl-dev和openssl,但是在安装node.js时得到了以下信息:
> ./configure && make && make install
Checking for program g++ or c++ : /usr/bin/g++
Checking for program cpp : /usr/bin/cpp
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for g++ : ok
Checking for program gcc or cc : /usr/bin/gcc
Checking for gcc : ok
Checking for library dl : yes
Checking for openssl : not found
Checking for function SSL_library_init : yes
Checking for header openssl/crypto.h : yes
Checking for library rt : yes
Checking for fdatasync(2) with c++ : yes
找不到Openssl。但是节点已成功安装。
为什么找不到openssl?有人有同样的问题吗?
最佳办法
这不是一个编程问题。仍然…
快速回答
安装程序通过两种方式检查对OpenSSL的支持。第一次检查对您失败,第二次成功。对我来说,第一次检查成功(请参阅下文)。无论哪种方式都行。
更长的答案
这是我构建它时得到的:
$ sudo apt-get install libssl-dev
$ ./configure
Checking for program g++ or c++ : /usr/bin/g++
Checking for program cpp : /usr/bin/cpp
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for g++ : ok
Checking for program gcc or cc : /usr/bin/gcc
Checking for gcc : ok
Checking for library dl : yes
Checking for openssl : yes
Checking for library rt : yes
<---snip--->
假设您从http://nodejs.org/下载了node.js v0.2.3,则配置主要由文件wscript中的waf完成。
相关行是:
if not Options.options.without_ssl:
if conf.check_cfg(package='openssl',
args='--cflags --libs',
uselib_store='OPENSSL'):
Options.options.use_openssl = conf.env["USE_OPENSSL"] = True
conf.env.append_value("CPPFLAGS", "-DHAVE_OPENSSL=1")
else:
libssl = conf.check_cc(lib='ssl',
header_name='openssl/ssl.h',
function_name='SSL_library_init',
libpath=['/usr/lib', '/usr/local/lib', '/opt/local/lib', '/usr/sfw/lib'],
uselib_store='OPENSSL')
libcrypto = conf.check_cc(lib='crypto',
header_name='openssl/crypto.h',
uselib_store='OPENSSL')
第一部分很简单。它运行pkgconfig。当我手动执行等效操作时,会发生以下情况:
$ pkg-config openssl --cflags --libs
-lssl -lcrypto
如果pkg-config无法确认软件包已安装,则运行第二组检查。在这种情况下,它将尝试编译一个琐碎的gcc程序,以检查libcrypt和libssl中是否存在函数。如果两者均成功,则继续安装。如果其中之一失败,则将发生致命错误,脚本将被炸毁。
次佳办法
@weng:我有同样的问题。解决方案很简单:sudo apt-get安装pkg-config 🙂
第三种办法
我在使用Debian 6时遇到了同样的问题。我必须安装libcurl4-openssl-dev。
切换到root用户,或使用sudo,然后运行:
apt-get install libcurl4-openssl-dev
这为我解决了问题。
第四种办法
如果使用Centos 5.x,请确保在./configure之前安装openssl-devel。
yum install openssl-devel
这在centos中为我解决了相同的问题。
第五种办法
-
确认您的openssl已安装。
-
如果已安装,请在
['/usr/lib', '/usr/local/lib', '/opt/local/lib', '/usr/sfw/lib']
中确认其路径; -
如果不在这些路径中,请尝试以下选项以及正确的openssl路径
./configure --openssl-libpath=/usr/local/ssl/lib --openssl-includes=/usr/local/ssl/include
第六种办法
我有同样的问题。
我试过了
./configure --prefix=/opt/node --openssl-libpath=/usr/local/lib/
即使我认为不需要--openssl-libpath=/usr/local/lib/
也解决了它
第七种办法
似乎我可以做到:
apt-get install lib32z1-dev
apt-get install pkg-config
以便在我使用Ubuntu 11.04或11.10进行全新的Rackspace部署时,始终删除关于openssl的所有错误和警告,以防其他任何人使用。
这是我最终决定使用node.js分解这些类型的实例的脚本要点:
https://gist.github.com/1606102
编辑:更新了要点,以反映对Node等所做的更新。