Как определить, какая библиотека openssl на самом деле используется RVM-установленным рубином

Я обнаружил, что могу успешно установить 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)? Как мне узнать, с какой библиотекой openssl был скомпилирован / связан рубин?

Я использую Linux Mint 13.

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-opensslopt-dir поддерживает несколько путей, разделенных : начиная с ruby ​​1.9.3-p327

Как насчет:

ruby -ropenssl -e "puts OpenSSL::VERSION"
Другие вопросы по тегам