我有一个较旧的二进制可执行文件(utserver,闭源),我试图在运行Fedora 22的系统上运行.

utserver想要openssl_1.0.0 – F22提供openssl_1.0.1k

我做了两个符号链接:

$sudo ln -s /usr/lib64/libssl.so.1.0.1k /usr/lib64/libssl.so.1.0.0

$sudo ln -s /usr/lib64/libcrypto.so.1.0.1k /usr/lib64/libcrypto.so.1.0.0

但是试图运行utserver抱怨库版本:

$./utserver

./utserver: /lib64/libcrypto.so.1.0.0: version `OPENSSL_1.0.0' not found (required by ./utserver)

./utserver: /lib64/libssl.so.1.0.0: version `OPENSSL_1.0.0' not found (required by ./utserver)

好的,所以它正在寻找一个版本字符串.我编辑了utserver ELF将字符串OPENSSL_1.0.0更改为OPENSSL_1.0.1,但是我得到了同样的错误(找不到’OPENSSL_1.0.1′)

objdump和readelf都在libssl.so.1.0.1的版本区域中显示OPENSSL_1.0.1:

$objdump -p /lib64/libssl.so.1.0.1 | grep OPENSSL

3 0x00 0x066a2b21 OPENSSL_1.0.1

4 0x00 0x02b21533 OPENSSL_1.0.1_EC

0x02b21533 0x00 07 OPENSSL_1.0.1_EC

所以现在我对utserver实际检查的内容感到困惑.我怀疑它看到了OPENSSL_1.0.1_EC并且失败了.如果我在ELF中添加_EC,我会得到一个段错误,大概是因为现在我的偏移都是错误的.

$readelf -d ./utserver

readelf: Error: Unable to seek to 0x15da90000000 for string table

readelf: Error: no .dynamic section in the dynamic segment

Dynamic section at offset 0x154fb8 contains 34 entries:

有没有办法告诉ld-linux强制加载OPENSSL_1.0.1_EC和/或修改ELF偏移的引用?非常感谢.

是的,我知道我可以在某个地方找到openssl_1.0.0的打包版本,但是如果我不需要的话,这是一个我不想恢复的库.

解决方法:

Is there any way to tell ld-linux to force load OPENSSL_1.0.1_EC

没有.

符号版本已更改的原因有:旧符号和新符号不是ABI-compatible.您必须重新编译可执行文件才能使用新符号,或者(更简单)您必须提供libssl.so.1.0.0(可以是安装并与已安装的libssl.so.1.0.1k共存.

that’s one library I’d rather not revert if I don’t have to.

您不必还原任何内容(并且还原将会破坏所有需要新版本的程序).

简单地从旧包中提供libssl.so.1.0.0将使旧程序(需要它)使用该文件,而新程序(需要libssl.so.1.0.1k)将继续使用libssl.so.1.0 .1k.

标签:linux,shared-libraries,dynamic-linking,elf,ldd

来源: https://codeday.me/bug/20190628/1315035.html

linux指定运行so文件,linux – 强制二进制文件使用特定(较新)版本的共享库(.so)...相关推荐

  1. linux中运行.pro文件,Linux下pro*c运行配置

    在Linux下运行.pc程序时,需要用到proc命令. -配置Pro*C/C++,以及链接到Oracle. 一般安装oracle时候都已经安装了pro*c,所以一般不需要再配置/etc/profile ...

  2. 如何在linux下运行matlab文件,linux bash下如何运行Matlab程序

    购置服务器后,应安装相应的科学计算软件.对于有显示器的服务器,用户可以方便的使用图形界面操作软件.而对于常见的远程登录方式,或是无显示设备的服务器而言,一般采用bash命令操作软件.这里以常用的Mat ...

  3. linux检查运行程序文件,LINUX定时检查程序运行状态

    当初偶那么一不小心,不知怎么给PHP配了个和MySQL版本不匹配的so文件,于是我的数据库就经常因为某些兼容问题挂吖挂吖挂吖...动不动MySQL服务就会挂掉,但我又不知道该怎么搞出正确的库,所以只好 ...

  4. linux服务器运行matlab文件报错

    linux服务器运行matlab文件报错 在linux服务器上安装matlab之后,如果想要运行matlab程序,通常的做法是先cd到matlab文件所在的文件夹,然后输入指令 % 假定matlab文 ...

  5. python打卡以及Linux自动运行python文件

    python打卡以及Linux自动运行python文件 前因 分析 python代码 实现linux自动运行python文件 了解crond 开机自启设置 定时运行python文件设置 crond踩坑 ...

  6. linux删除指定大小的文件,Linux下删除空文件,删除指定大小的文件

    Linux下批量删除空文件(大小等于0的文件)的方法: find . -name "*" -type f -size 0c | xargs -n 1 rm -f 用这个还可以删除指 ...

  7. 查看Linux服务器运行级别命令,linux命令1、如何查看当前的Linux服务器的运行级别?...

    1.如何查看当前的Linux服务器的运行级别? 答: 'who -r' 和 'runlevel' 命令可以用来查看当前的Linux服务器的运行级别. 2.如何查看Linux的默认网关? 答: 用 &q ...

  8. Linux C try 头文件,linux c 头文件

    //1.Linux中一些头文件的作用: #include //ANSI C.提供断言,assert(表达式) #include //GCC.GTK,GNOME的基础库,提供很多有用的函数,如有数据结构 ...

  9. linux重命名乱码文件,Linux中重命名乱码文件

    Linux下,如何将一个乱码的文件进行重命名 方法一: 命令格式:mv $(ls |egrep "[^a-zA-Z0-9.-]") tandao.tx [root@nb o]# l ...

  10. linux怎么运行脚本文件路径,关于linux中执行脚本或程序时指定的路径

    假设/mnt/bin 目录下存在一个名为 hello.sh 的可执行文件. 1. 若当前目录是 /mnt/bin ,可以使用 ./hello.sh 来执行这个可执行文件,但是使用 hello.sh 就 ...

最新文章

  1. JavaScript最全编码规范
  2. SSH远程管理(用户登录控制及密码验证)
  3. echart css样式弄了几个月了,样式一直都没有好好解决,好激动
  4. CS中using的使用-以FileStream写入文件为例
  5. C++Heap Sort堆排序的实现算法(附完整源码)
  6. 计算机专业科普知识图文并茂,科普下计算机专业需要什么基础知识?
  7. HDLBits答案(20)_Verilog有限状态机(7)
  8. Linux网络不可达解决方法
  9. 【剑指offer】_12 数组中的逆序对
  10. 今天,这些公众号被永久禁言
  11. linux文字大小,Qt 字体大小的计算
  12. JAVA中的isMirror函数_Swift中的反射Mirror
  13. 计算机端口详解(总结)
  14. NFS PRC端口映射器
  15. 弹性碰撞次数与圆周率的关系 - 3Blue1Brown
  16. 使用腾讯云COS对象存储(详细流程)
  17. 深圳中学因招聘上热搜:名校博士挤破头想进,教学成绩也确实不服不行
  18. iOS10新特性——————陈Hong鑫
  19. JZOJ5055 树上路径
  20. Android 高级面试题及答案

热门文章

  1. maven pom 文件的 scope,scope=system 时打包打不进
  2. ajax zlib,jQuery递增地读取Ajax流吗?
  3. python多线程实现同时下载_Python实现多线程下载
  4. mysql 5.7 binlog 压缩_MySQL binlog 压缩功能的相关介绍-爱可生
  5. 【转】for循环中进行Promise异步操作的问题总结
  6. 《网页设计技巧》系列之一 浅谈文本排版
  7. python 判断是字母的多种方法
  8. Hibernate方法save、update、merge、saveOrUpdate及get和load的区别
  9. Linux下出现command not found的解决办法
  10. 借助mapshaper的简化来修复geojson的拓扑错误