赞
踩
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链接了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。