免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4830 | 回复: 12
打印 上一主题 下一主题

怎么用ld [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-21 21:20 |只看该作者 |倒序浏览
下面是两个c文件:
main.c:

int test();
main()
{
test();
}


test.c:

test()
{}

运行命令cc -c main.c和cc -c test.c后,生成main.o和test.o

再运行ld -o kilik main.o test.o,结果报错ld: warning: cannot find entry symbol _start; defaulting to 08048074
请问应该怎样用ld把这两个目标文件连接成一个可执行elf文件呢

论坛徽章:
0
2 [报告]
发表于 2007-11-21 21:40 |只看该作者
cc -v main.o test.o -o kilik

你可以看到那些参数。如果对ldscript没有特殊指定的话,用cc代替ld是比较方便的。

论坛徽章:
0
3 [报告]
发表于 2007-11-21 21:56 |只看该作者
加个 -s 参数试试.
真不明白你干嘛弄这个麻烦的东西.

论坛徽章:
0
4 [报告]
发表于 2007-11-22 10:39 |只看该作者
加了 -s 问题依旧
我是为了使用自定义的ldscript才用ld的
命令如下
ld -T ./ldscript.lds -o kilik main.o cmp.o
结果报错
ld:./ldscript.lds:1: parse error
请问应该怎么做才对啊?

论坛徽章:
0
5 [报告]
发表于 2007-11-22 12:24 |只看该作者

回复 #4 gta 的帖子

你的lds写的有问题吧?  可以尝试修改默认的那个,用ld --verbose查看

论坛徽章:
0
6 [报告]
发表于 2007-11-22 16:01 |只看该作者

回复 #1 gta 的帖子

entry symbol 可以在命令行上定义 用-e --entry
也可以在link script file 文件中定义.
如果上述都没有定义,那么ld 会寻找start 符号作为起始地址
如果上述都没有找到,那么默认的link 地址一般是你的script 文件中定义的最开始的地址

论坛徽章:
0
7 [报告]
发表于 2007-11-22 20:21 |只看该作者
原帖由 albcamus 于 2007-11-22 12:24 发表
你的lds写的有问题吧?  可以尝试修改默认的那个,用ld --verbose查看

不会吧,我的lds是这样来的ld --verbose > ldscript.lds

论坛徽章:
0
8 [报告]
发表于 2007-11-26 16:38 |只看该作者
原帖由 gta 于 2007-11-22 20:21 发表

不会吧,我的lds是这样来的ld --verbose > ldscript.lds


除了lds, --verbose输出的其他信息strip掉了吗?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
9 [报告]
发表于 2007-11-27 01:46 |只看该作者
这个......如果你理解了链接的作用就知道了。
_start作为入口,会调用main函数,这本身在链接前就是存在一个都需要去链接的对象文件之中,而非你编译好的对象文件。
_start一般可能结构(结构大致描述,非汇编)
......//比方加载库啥的啊
call main
call exit

exit:可能
.......//清系统中的一些东西,比方标准输出缓冲区啥的
if(atexit)
call atexit
call _exit
这些个玩意都需要链接进去的

[ 本帖最后由 cjaizss 于 2007-11-27 09:22 编辑 ]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
10 [报告]
发表于 2007-11-27 01:50 |只看该作者
你可以用strace跟踪一下,看看gcc是如何ld的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP