首页 > 系统相关 >[linux]跨发行版运行二进制

[linux]跨发行版运行二进制

时间:2024-09-20 17:13:57浏览次数:1  
标签:bin ld interpreter 二进制 fields 发行版 linux output

需求点:客户不接受docker部署,服务编译环境无法和客户环境对齐,需要找到办法兼容

方案:mock整套ld/so,不依赖客户环境的基础组件

 

 

1. 正常编译,编译后拷贝整套so

#!/bin/bash
ABS_PATH=`pwd`
echo "start copy system runtime libs, right path: ${ABS_PATH}"

ldd_output=$(ldd ../exec)

echo "$ldd_output" | while read -r line; do
  fields=($(echo "$line" | awk '{print $NF, $(NF-1)}'))
  if [ "${#fields[@]}" -eq 2 ] && [ -e "${fields[1]}" ] && [[ "${fields[1]}" != "/rtc_transcode"* ]] ; then
    echo "cp valid so: [${fields[1]}] to [output/lib]"
    cp ${fields[1]} ../output/lib
  fi
done

cp ../local_record_deps/patchelf ../output/bin/

chmod 777 ../output/lib/*

 

2. 发行版 patchelf 作为辅助产物打包,运行前更改ld为编译环境的ld


/output/bin/patchelf --set-interpreter /output/lib/ld-linux-x86-64.so.2 /output/bin/toutiao.videoarch.rtc_transcode

更改前 root@n37-009-198:/data00/build# readelf -aW a.out | grep -iE "interpreter" [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2] 更改后 [root@c211b21fb421 bin]# readelf -aW ./exec | grep -iE "interpreter" [Requesting program interpreter: /output/lib/ld-linux-x86-64.so.2]

 

3. 优化

仅首次运行需要调整

标签:bin,ld,interpreter,二进制,fields,发行版,linux,output
From: https://www.cnblogs.com/zeolim/p/18422888

相关文章

  • 【linux】【docker】Docker默认网段配置导致无法访问
    背景集团有N个基地,所有基地的网络使用的是172.x.x.x网段,这本身没有什么问题!但Docker默认的桥接网段也是172.17.x.x的,如果不修改docker的默认配置会导致个别基地无法访问!列举几个基地使用的网段基地网段A基地172.30.x.xB基地172.28.x.xC基地172.18.x.x如......
  • centos(linux): logrotate常用功能
    一,测试配置是否正确?-d:打印debug信息-v:显示详细的输出信息[[email protected]]#logrotate-d/etc/logrotate.d/secure-v二,配置/var/log/secure按天分割/etc/logrotate.d/secure/var/log/secure{missingokdailyrotate90notifemptydatee......
  • linux 基础知识 什么是僵尸进程?有什么影响?如何解决?
    linux系统僵尸进程在Linux系统中,僵尸进程(ZombieProcess)是一种特殊的进程状态,它指的是一个已经完成执行的进程,其父进程尚未通过wait()或waitpid()系统调用来回收其资源和状态信息。僵尸进程本身并不占用CPU和其他资源,但它的进程描述符(PCB)仍然保留在系统中,这会占用系统资源并可......
  • 在ESP32-C3上运行Linux:探索RISC-V的无限可能
    在ESP32-C3上运行Linux:探索RISC-V的无限可能随着物联网和嵌入式系统的快速发展,开发者们对更强大、更灵活的平台需求日益增长。今天,我们向大家介绍一个令人兴奋的开源项目——在ESP32-C3上引导Linux内核。这个项目展示了如何在ESP32-C3RISC-V处理器上运行Linux,为开发者打开......
  • linux基础-linux基本命令
       linux基本命令    1.APT(AdvancedPackingTool)   ubuntu中功能最强大的命令行软件包管理工具,用于获取、   安装、编译、卸载和查询一些软件包,以及检测软件信号关系。      工作原理:       /etc/apt/sources.list文件  ......
  • 【Linux 】开发利器:深度探索 Vim 编辑器的无限可能
    ......
  • linux基础-shell脚本
    0.shell是什么东西?    shell是一个命令解析器。   我们可以把很多要执行的命令,以某种语言的方式,   组织起来交给shell去解析执行。      xxx.sh是多个命令的组织文件,shell脚本文件,也是一个普通   文件,是以shell脚本语言的方式、语法把多......
  • linux 下安装 RabbitMq 及 .net core 实操多种模式
    当前系统DebianGNU/Linux12安装命令1、sudoaptupdate//更新系统2、sudoapt-getinstallrabbitmq-server//安装rabbitMq服务3、sudoservicerabbitmq-serverstart//启动rabbitMq4、sudosystemctlenablerabbitmq-server//设置......
  • Linux curl命令详解使用
    curl是一个非常强大且灵活的工具,支持多种协议(如HTTP、HTTPS、FTP等),并通过各种选项支持不同的请求方式、认证机制、代理设置、传输限制等。这些参数可以极大地提高网络请求中的效率和灵活性。curl命令的基本语法curl[options][URL...]options:指定不同操作的参数。U......
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice 国产版实现前端框架内置对话框在Word中
    PageOffice国产版:支持信创系统,支持银河麒麟V10和统信UOS,支持X86(intel、兆芯、海光等)、ARM(飞腾、鲲鹏、麒麟等)、龙芯(LoogArch)芯片架构。本示例关键代码的编写位置Vue+Springboot注意本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做......