如何确定RVM安装的Ruby实际使用的是哪个openssl库

8

我发现我可以使用以下任意一条命令成功安装Ruby:

$ rvm reinstall 1.9.3-p327
$ rvm reinstall 1.9.3-p327 --with-openssl-dir=/usr/local
$ rvm reinstall 1.9.3-p327 --with-openssl-dir=/afdlkjasd_not_a_dir
$ rvm reinstall 1.9.3-p327 --with-openssl-dirffadsf=/afdlkjasd_not_a_dir

无论我使用上述哪个命令,我都可以输入以下内容:
$ rvm use 1.9.3-p327
Using /home/clay/rvm/gems/ruby-1.9.3-p327
$ which ruby
/home/clay/.rvm/rubies/ruby-1.9.3-p327/bin/ruby
$ ruby -e "puts require('openssl')"
true

我似乎无论做什么都具有SSL支持。我猜测RVM或Ruby构建过程不介意无效的选项或值。即使我正确输入了--with-openssl-dir选项,我也不知道它是否被使用。
RVM是否将我的Ruby链接到我想要的OpenSSL库(/usr/local中的那个)?如何确定Ruby编译/链接时使用的是哪个OpenSSL库?
我正在使用Linux Mint 13。
2个回答

7
如何?
ruby -ropenssl -e "puts OpenSSL::VERSION"

知道版本部分有所帮助(它显示为1.1.0),所以谢谢你并点赞,但我不能接受这个答案,因为它仍然不足以帮助我找出它链接的是哪个库。我的系统上有许多不同的文件,它们的名称以openssl.so或libssl.so开头,我不知道它链接的是哪一个。没有一个文件名中包含“1.1.0”。 - antinome
(或者它是否使用了共享库?也许它是静态编译的,我不知道。) - antinome

5

Ruby拥有相当复杂的库检测机制,每个扩展都有自己的代码。幸运的是,大多数扩展支持pkg-config,因此可以强制定位*.pc文件的位置:

PKG_CONFIG_PATH=/path/to/openssl/lib/pkgconfig rvm reinstall 1.9.3
rvm use 1.9.3

编译完成后,您可以在OSX上进行验证:

find $MY_RUBY_HOME -name openssl.bundle | xargs otool -L

或者在 Linux 上:

find $MY_RUBY_HOME -name openssl.so | xargs ldd

关于--with-openssl-dir=...,它并不被Ruby完全支持,应该使用--with-opt-dir=... + --with-openssl,opt-dir支持多个路径,用:分隔,从Ruby 1.9.3-p327开始。


非常感谢,这让我有了更深入的了解,尽管我仍然感到困惑。在我的Linux系统上运行这两个命令后的输出显示它正在链接到~/.rvm/usr/lib/libssl.so.1.0.0,而我已将PKG_CONFIG_PATH设置为/usr/lib/x86_64-linux-gnu/pkgconfig。(这是预期的吗?) - antinome
纯属好奇,Ruby可执行文件与openssl.so有何关系? - antinome
如果您需要更多帮助,请在此处与我(mpapis)交谈:http://webchat.freenode.net/?channels=rvm - mpapis
libssl.pc文件已经存在。我使用--with-opt-dir=/usr重新安装了它,但它仍然显示链接到之前相同的SSL库。 - antinome
1
你可以执行 rm -rf $rvm_path/usr 命令 - rvm 将重新安装 libyaml,但会使用系统的 openssl(如果可能的话)。 - mpapis
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接