源码编译elfutils

目录

编译环境 阿里云ubuntu20.04

编译步骤

1 下载elfutils-0.170源码

2 解压

3 configure

4 make

5 修改源码,关闭Werror(如不报错可跳过这一步)

6 sudo make install  安装完毕


编译环境 阿里云ubuntu20.04

9dbcf8df3ea64128b1adbfcf7dc6b844.png

编译步骤

1 下载elfutils-0.170源码

注意,对于比较老的内核,如linux 4.4(许多中标麒麟和银河麒麟都是用这个老版本),elfutils0.170是编译不过去的。应使用老版本的elfutils,如0.164。后面的编译过程不变。

2 解压

3 configure

按照elfutils-0.170 (linuxfromscratch.org)

的描述,首先

./configure --prefix=/usr --program-prefix="eu-"

 注意,在某些平台上,要先执行autoreconf -i再configure

4 make

执行make后,在elfutils0.170中遇到如下问题,报错:(elfutils-0.164无此问题)

error: ‘__elf64_msize’ specifies less restrictive attribute than its target ‘elf64_fsize’: ‘const’ [-Werror=missing-attributes]

5 修改源码,关闭Werror(如不报错可跳过这一步)

根据linux - #pragma GCC diagnostic ignored "-Wmissing-attributes" does not work - Stack Overflow 

的描述,执行以下命令:

sed -i 's/-Werror//g' $(find . -type f -exec egrep -l _no_Werror {} \;)

其具体意义见我的另一篇博客对一条Linux命令的解读(sed find egrep)_金色熊族的博客-CSDN博客 

然后再执行一遍make

6 sudo make install  安装完毕

### 编译选项 `-strip` 的作用 编译选项 `-strip` 主要用于减少生成的目标文件大小。通过去除目标文件中的符号表和重定位信息,可以显著减小二进制文件的体积[^1]。 具体来说,符号表包含了诸如函数名、变量名等调试信息,在开发阶段非常有用,但在生产环境中却增加了不必要的开销。因此,在确保应用程序稳定运行的前提下,使用此选项能够有效节约存储资源并提高加载速度。 值得注意的是,一旦应用了 `-strip` 选项处理后的文件将失去其原始的符号信息,这意味着后续不能再利用标准调试工具对其进行深入分析或追踪错误位置。为了应对可能的需求变化,建议开发者保存一份未经压缩处理过的副本作为备份。 对于基于ARM架构平台的应用构建过程而言,`-strip` 常见于交叉编译场景下配合特定命令如 `arm-linux-strip` 来实现上述功能。 ### 使用方法示例 下面是一个简单的例子展示了如何在Makefile或其他构建脚本中加入 `-Wl,-s` 或者直接调用 strip 工具的方式来进行链接时自动删除无用的信息: ```makefile CC = gcc CFLAGS = -Wall -O2 LDFLAGS = -Wl,-s # 链接期间去掉符号表 all: program program: main.o utils.o $(CC) $(LDFLAGS) -o $@ $^ ``` 或者也可以单独执行如下命令完成相同的效果: ```bash gcc -o my_program source.c && strip my_program ``` 另外还有其他类似的工具比如 `eu-strip`, 安装方式取决于操作系统环境;例如在CentOS上可以通过包管理器快速获取到它(`yum install elfutils`),而不仅仅是局限于GNU/Linux下的 `strip` 实现[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值