You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu Server 22.04.4 LTS下寻找同时安装静态/动态链接版本程序的方法咨询

Ubuntu Server 22.04.4 LTS下寻找同时安装静态/动态链接版本程序的方法咨询

你说得太对啦!现在主流Linux发行版(包括Ubuntu Server 22.04)里,默认提供的程序几乎都是动态链接的——毕竟动态链接能节省磁盘空间、方便共享库的更新维护,静态链接的程序确实越来越少见了。不过还是有一些办法能找到或者生成同时存在两种版本的程序,下面给你一步步说:

一、寻找仓库中自带双版本的程序

Ubuntu的软件仓库里还是有少数工具同时提供动态和静态链接的包,比如:

  • busybox:默认安装的是动态链接版(路径通常是/bin/busybox),你可以通过sudo apt install busybox-static安装静态链接版本,安装完成后静态版一般在/usr/bin/busybox-static
  • wget:同样,默认是动态版(/usr/bin/wget),执行sudo apt install wget-static就能得到静态版的/usr/bin/wget-static

二、验证程序的链接类型

拿到程序路径后,你可以用这两个命令确认是静态还是动态链接:

  • 用file命令:比如file /bin/busybox,动态链接的程序会显示类似“ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=xxx, for GNU/Linux 3.2.0, stripped”;静态链接的则会显示“statically linked”
  • 用ldd命令:如果是静态链接程序,执行ldd /usr/bin/busybox-static会输出“not a dynamic executable”;动态链接的程序则会列出所有依赖的共享库

三、对比两个版本的大小

直接用ls -lh命令就能直观看到文件大小差异,比如:

ls -lh /bin/busybox /usr/bin/busybox-static

输出里会显示两个文件的大小、修改时间等信息,静态版通常会比动态版大很多,因为它把所有依赖的库都打包进了程序本身。

四、列出动态链接程序的依赖库

还是用ldd命令,比如查看动态版wget的依赖:

ldd /usr/bin/wget

命令会输出所有依赖的共享库路径、名称,以及对应的系统库位置。

五、手动编译生成静态版本(如果找不到现成的)

如果某个程序仓库里没有静态版,你也可以自己下载源码编译:

  1. 先安装编译依赖,比如sudo apt install build-essential
  2. 下载程序源码(比如从官方网站或者git仓库)
  3. 编译时加上-static参数,比如用gcc编译C程序:gcc -static your_program.c -o your_program-static
    这样就能得到静态链接的版本,和系统里默认的动态版对比啦。

备注:内容来源于stack exchange,提问作者Krecikkko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 10:32:58