当前位置:   article > 正文

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

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文件

编译命令:

  1. gcc -m32 -c 8259a.c -o 8259a.o
  2. nasm -f elf pics.s -o pics.o
  3. ld 8259a.o pics.o -o o8259.o
  4. gcc -m32 -c main.c -o main.o
  5. 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链接了

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号