执行编译的二进制文件时未定义符号,尽管 readelf 显示具有正确版本的符号

执行编译的二进制文件时未定义符号,尽管 readelf 显示具有正确版本的符号

我按照此处的说明编译了 vagrant-libvirt 插件: https://github.com/hashicorp/vagrant/issues/7039#issuecomment-488499883

它编译得很好,但在运行时我收到以下错误:

3: from /opt/vagrant/embedded/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
2: from /home/manu/.vagrant.d/gems/2.6.6/gems/ruby-libvirt-0.7.1/lib/libvirt.rb:11:in `<top (required)>'
1: from /opt/vagrant/embedded/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/opt/vagrant/embedded/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': /usr/lib64/libk5crypto.so.3: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b - /home/manu/.vagrant.d/gems/2.6.6/gems/ruby-libvirt-0.7.1/lib/_libvirt.so (LoadError)

但是,如果我检查,/usr/lib64/libk5crypto.so.3我确实导出了这个符号:

$ readelf -Ws /usr/lib64/libk5crypto.so.3 | grep EVP_KDF_ctrl
5: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_KDF_ctrl@OPENSSL_1_1_1b (5)

另一方面,我的系统(RHEL 8)安装了 openssl 1.1.1c:

rpm -qa | grep openssl
openssl-1.1.1c-15.el8.x86_64
openssl-pkcs11-0.4.10-2.el8.x86_64
openssl-libs-1.1.1c-15.el8.x86_64
xmlsec1-openssl-1.2.25-4.el8.x86_64
openssl-devel-1.1.1c-15.el8.x86_64

我应该在这里解决什么问题?我是否安装了错误的库?我是否设置了错误的 ld 标志和包含路径?

相关内容