gcc静态链接报错 ld: can not find -lc

一、遇见bug

最近在学习程序编译、装载等内容,复现书中的小实验时,发现使用

实验环境:centos6、gcc4.4.7、链接器和系统libc库都是2.12

gcc -static -fno-builtin hello.c

链接报错:

ld: can not find -lc

collect2: ld returned 1 exit status


二、尝试

回过头来看着两句报错提示,很明显就是缺少 libc.a 静态目标文件,collect2 是链接器 ld 的包装,本质就是链接报错,目前的系统已经不会默认安装静态库,我在自己的本机搜索 libc.a 确实也没有搜到

当时直接在网上以  ld: can not find -lc  位关键词使劲搜,压根没有发现任何结果,后来过几天转变思路,直接搜 linux 缺少 libc.a 文件,发现还是不行,再换英文 libc.a not  found ,在  stackoverflow 发现了相似情况并给出了解决方案


三、解决

解决方案一:本来我想直接在本机编译一个 libc.a 的但是,源码也没有找到,好再可以直接安装这个库,更简单

解决方案二:直接安装

yum install glibc-static

我的centos6使用的是yum命令,新的centos好像是用 dnf 安装,ubuntu使用 apt ,包名的应该就是这个。


安装完这个包之后,再搜 libc.a 文件就有了,hello.c 文件也静态编译成功! (glibc-static 这个包不仅包含 libc.a 标准库,还给安装了一堆 .a 的静态目标打包文件)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值