【问题标题】:How to tell which openssl lib is actually being used by an RVM-installed ruby如何判断 RVM 安装的 ruby​​ 实际使用了哪个 openssl lib
【发布时间】:2012-12-19 15:53:56
【问题描述】:

我发现我可以使用以下任何命令成功安装 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 lib 编译/链接的?

我使用的是 Linux Mint 13。

【问题讨论】:

    标签: ruby openssl rvm


    【解决方案1】:

    怎么样:

    ruby -ropenssl -e "puts OpenSSL::VERSION"
    

    【讨论】:

    • 知道版本有部分帮助(它说 1.1.0),所以谢谢你和 +1,但我不能接受答案,因为它仍然不足以帮助我弄清楚它是哪个库链接反对。我的系统上有许多不同的文件,它们的名称以 openssl.so 或 libssl.so 开头,我不知道链接的是哪个文件。它们的文件名中都没有“1.1.0”。
    • (或者它甚至使用共享库?也许它是静态编译的,我不知道。)
    【解决方案2】:

    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/包配置。 (或者这是预期的?)
    • 出于好奇,ruby 可执行文件与 openssl.so 有什么关系?
    • /usr/lib/x86_64-linux-gnu/pkgconfig/libssl.pc 吗?您还可能需要指定额外的--with-opt-dir=/usr,希望 ruby​​ 可以正确检测到它 - 尽管由于 64 位平台的处理方式可能会出现问题。
    • 至于关系 - openssl.so 是扩展的一部分,当你这样做 require 'openssl' 时,它将自动加载。
    • 你可以 rm -rf $rvm_path/usr - rvm 会重新安装 libyaml 但使用系统 openssl(如果可能的话)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多