openssl: symbol lookup error: openssl: undefined symbol: EVP_mdc2

在服务器上安装低版本openssl跑实验时出现了该问题,原因是动态链接库不对。

进入openssl的安装目录,使用ldd openssl可以看到链接到了其他版本openssl安装的libssl.o.1.1上了

linux-vdso.so.1 (0x00007ffe74722000)
        libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f819b068000)
        libcrypto.so.1.1 => /lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f819ad91000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f819ad6e000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f819ab7c000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f819ab76000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f819b239000)

 即使按照网上的教程将安装目录下的lib文件夹放入ldconfig,依旧报错。这是因为系统搜索.so文件的顺序为

  • 编译目标代码时指定的动态库搜索路径; 如果在编译程序时增加参数-Wl,-rpath='.' , 这时生成程序的Dynamic section会新加一个RPATH段
  • 环境变量LD_LIBRARY_PATH指定的动态库搜索路径; ( 可用export LD_LIBRARY_PATH="NEWDIRS" 命令添加临时环境变量 )
  • RUNPATH: 写在elf文件中
  • ldconfig的缓存:配置文件/etc/ld.so.conf中指定的动态库搜索路径;(系统默认情况下未设置)
  • 默认的动态库搜索路径/lib;
  • 默认的动态库搜索路径/usr/lib;
  • 如果ldconfig的缓存中有相同名字的.so文件,则会找路径最短的

 (见rpath和patchelf - zaliasc - 博客园 (cnblogs.com))

因此可以将安装目录的lib位置通过config --Wl,-rpath='/lib' 加到gcc的参数中,之后make & make install 

再次ldd

linux-vdso.so.1 (0x00007ffc0b585000)
        libssl.so.1.1 => /home/TLS/openssl/lib/libssl.so.1.1 (0x00007feb11b2e000)
        libcrypto.so.1.1 => /home/TLS/openssl/lib/libcrypto.so.1.1 (0x00007feb11630000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007feb115f3000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007feb11401000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007feb113fb000)
        /lib64/ld-linux-x86-64.so.2 (0x00007feb11d67000)

问题解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值