当前位置: 技术问答>linux和unix
请教一个ld的问题?
来源: 互联网 发布时间:2015-11-26
本文导语: 我写了一个hello world程序,我想用as,ld等命令来编译程序。 但在ld的时候,出现错误。错误如下: XXXXX:/opt/programtest/bintest$ ld -o bintest3 bintest.o ld: warning: cannot find entry symbol _start; defaulting to 0000000008048094 bintest...
我写了一个hello world程序,我想用as,ld等命令来编译程序。
但在ld的时候,出现错误。错误如下:
XXXXX:/opt/programtest/bintest$ ld -o bintest3 bintest.o
ld: warning: cannot find entry symbol _start; defaulting to 0000000008048094
bintest.o(.text+0x56):bintest.s:42: undefined reference to `printf'
bintest.o(.text+0x82):bintest.s:53: undefined reference to `printf'
操作步骤如下:
$ gcc -S bintest.c
$ as -o bintest.o bintest.s
执行这两步都没有错,但执行ld时错了,请问如何让ld执行通过
我当时用ld -o bintest bintest.o -i /usr/bin/libc.a执行,通过了,但生成的bintest不能执行。
bash: ./bintest: cannot execute binary file
请问个位大侠怎么改正?
但在ld的时候,出现错误。错误如下:
XXXXX:/opt/programtest/bintest$ ld -o bintest3 bintest.o
ld: warning: cannot find entry symbol _start; defaulting to 0000000008048094
bintest.o(.text+0x56):bintest.s:42: undefined reference to `printf'
bintest.o(.text+0x82):bintest.s:53: undefined reference to `printf'
操作步骤如下:
$ gcc -S bintest.c
$ as -o bintest.o bintest.s
执行这两步都没有错,但执行ld时错了,请问如何让ld执行通过
我当时用ld -o bintest bintest.o -i /usr/bin/libc.a执行,通过了,但生成的bintest不能执行。
bash: ./bintest: cannot execute binary file
请问个位大侠怎么改正?
|
注意:我们用GCC生成的.o文件是以_main为入口的,但是as/ld是以_start为入口的,所以就出现了找不到_start的错误:cannot find entry symbol _start
解决的办法是打开main函数生成的.o文件,然后把里面的_main都改成_start,再用ld命令。
另外这个错误:undefined reference to `printf'
原因是没有链接上动态链接库。
解决的办法是:ld -dynamic-linker /lib/ld-linux.so.2 -lc -o bintest bintest.o
解决的办法是打开main函数生成的.o文件,然后把里面的_main都改成_start,再用ld命令。
另外这个错误:undefined reference to `printf'
原因是没有链接上动态链接库。
解决的办法是:ld -dynamic-linker /lib/ld-linux.so.2 -lc -o bintest bintest.o