gnu ld链接出现“ no .eh_frame_hdr table will be created.”

ld: error in 8259.o(.eh_frame); no .eh_frame_hdr table will be created.


问题描述:

我有三个文件:

8259a.c、pics.s、main.c

其中8259a.c依赖pics.s,而main.c依赖8259.c和pics.s

我想先将8259a.c和pics.s一起编译成.o文件

编译命令:

gcc -m32 -c 8259a.c -o 8259a.o

nasm -f elf pics.s -o pics.o

ld 8259a.o pics.o -o o8259.o

gcc -m32 -c main.c -o main.o

ld main.o o8259.o

正当我以为一切就绪时,出现了出乎意料的错误

“ no .eh_frame_hdr table will be created.”

这是ld提示的错误信息

意思是与elf的符号制表符冲突了。不要被表面字意思迷惑

很明显

ld 8259a.o pics.o -o o8259.o

这段出现了问题,仔细man了一下,是自己马虎了,ld是链接成可执行文件

这样的话,会加入启动代码,这样二次编译时候启动代码里的符号制表可能会与库符号表冲突,产生歧义错误

这种情况下需要使用:-shared

修改一下:

ld -shared 8259a.o pics.o -o o8259.o

这样ld就不会链接成可执行文件,不会加入启动代码,也不会与启动代码的符号制表冲突,这样生成的o8259.o就可以直接和main.o链接了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

17岁boy想当攻城狮

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值