在服务器上安装低版本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)
问题解决