求linux注释 发表于 2014-09-11 22:49

linux是怎么对子目录里的.o文件进行链接的?

本帖最后由 求linux注释 于 2014-09-11 22:50 编辑

本人新手,最近在研究linux的编译过程,发现一个问题:linux他递归每个目录,把每个目录下的文件编译成对应的目标文件,然后把他链接为一个名为“ built-in.o ” 的文件... 后来我自己尝试了一下,使用” arm-linux-ld -T/home/test/linux/linux-2.6.22.6/arch/arm/kernel/vmlinux.lds -o built-in.o *.o “这条命令对目录下所有目标文件进行链接,发现他报错“ arm-linux-ld : cannot find usr/built-in.o ”,那么linux的makefile到底是怎么做的?怎么样才能让他不报错?

Tinnal 发表于 2014-09-11 23:20

回复 1# 求linux注释


    arm-linux-ld -r -o built-in.o *.o

求linux注释 发表于 2014-09-11 23:34

回复 2# Tinnal 加 -r 也不行啊,还是报那个错误


   

求linux注释 发表于 2014-09-12 00:03

把-T和*.o换成文件列表好像就可以了...

求linux注释 发表于 2014-09-12 00:08

:lol 弄明白了,原来linux编译子目录时是不用加-T的,链接vmlinux时才需要,至于这个*.o好像有问题暂时还不得而知,不过换成文件列表就能通过了,可能是编译器抽风了吧。。谢谢LS那些大侠

Tinnal 发表于 2014-09-12 08:26

回复 5# 求linux注释

你在命令前加上echo ,把命令展开打出来的看看和你自己输入的有什么不一样。
是不是因为你当前目录已经有一个build_in.o文件,*.o把它也当输入了。


   
页: [1]
查看完整版本: linux是怎么对子目录里的.o文件进行链接的?