Node.js安装:未安装openssl

ajs*_*sie 44 javascript ubuntu ssl openssl node.js

我已经安装了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 
Run Code Online (Sandbox Code Playgroud)

找不到Openssl.但节点已成功安装.

为什么没有找到openssl?有人有同样的问题吗?

小智 49

@weng:我遇到了同样的问题.解决方案很简单:sudo apt-get install pkg-config :)

  • 那么,程序是什么?首先运行sun apt-get install pkg-config? (2认同)
  • 是的,那也为我修好了.wscript文件使用pkg-config来检查openssl.http://comments.gmane.org/gmane.comp.lang.javascript.nodejs/11668 (2认同)

Con*_*ler 35

这不是一个编程问题.仍然...

快速回答

安装程序以两种方式检查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--->
Run Code Online (Sandbox Code Playgroud)

假设您从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')
Run Code Online (Sandbox Code Playgroud)

第一部分很简单.它运行pkgconfig.这是当我手工完成等效操作时会发生的事情:

 $ pkg-config openssl --cflags --libs
 -lssl -lcrypto  
Run Code Online (Sandbox Code Playgroud)

如果pkg-config无法确认已安装软件包,则运行第二组检查.在这种情况下,它尝试编译一个简单的gcc程序,它检查libcrypt和libssl中是否存在函数.如果这两个都成功,安装继续.如果其中一个失败,则会出现致命错误,并且脚本会爆炸.

  • sudo apt-get install pkg-config (10认同)
  • 好的,但问题是为什么节点找不到我的openssl.我通过"aptitude install libssl-dev openssl"安装它. (2认同)

jos*_*ett 26

我使用Debian 6时遇到了同样的问题.我必须安装libcurl4-openssl-dev.

切换到root用户,或使用sudo,然后运行:

apt-get install libcurl4-openssl-dev
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题.

  • 这解决了我在新机器(Ubuntu 11.04)上安装节点时遇到的问题,上面的解决方案(sudo apt-get install pkg-config)没有. (6认同)
  • 这解决了Ubuntu上的问题 (2认同)
  • 也为我工作过!Ubuntu服务器11.04 (2认同)
  • 在ubuntu 10.04上使用nodejs 0.6.1为我工作 (2认同)
  • 如果这对您有用,则您遇到的问题与原始问题中的问题不同.用户*安装了*openssl,但没有安装pkg-config(或者pkg-config不知道openssl包).如果查看安装消息,您会发现"检查函数SSL_library_init:no". (2认同)

Hal*_*Hal 10

如果使用Centos 5.x,请确保在./configure之前安装openssl-devel.

yum install openssl-devel
Run Code Online (Sandbox Code Playgroud)

这在centos中为我解决了同样的问题.