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