为我的操作系统移植NewLib:一些问题

时间:2010-08-08 11:44:53

标签: c gcc ld newlib

我正在尝试为我的操作系统移植NewLib(我正在学习本教程:http://wiki.osdev.org/Porting_Newlib),我有一些问题。

  • 一旦LibGloss完成并编译,我何时必须使用已创建的libnosys.a?是在我编译main.c的时候吗?

    mipsel-uknown-elf-gcc main.c -Llibnosys.a`
    
  • 我的crt0.c已经完成。我必须“将它作为第一个对象链接”。我怎样才能做到这一点?这是这样的吗?

    mipsel-uknown-elf-ld crt0.o main.o
    

感谢您的回答!

1 个答案:

答案 0 :(得分:1)

链接作为第一个对象可能会像你正在显示的那样正常工作,但文档确实提到使用链接描述文件并将crt0.o添加为STARTUP() - 我对链接器脚本不太熟悉,但你可以找到默认的链接描述文件并可能创建/调整它:

链接脚本的语法:http://wiki.osdev.org/Linker_Scripts

http://sourceware.org/binutils/docs-2.19/ld/Scripts.html#Scripts

The linker always uses a linker script. If you do not supply one yourself, the linker
will use a default script that is compiled into the linker executable. You can use the 
`--verbose' command line option to display the default linker script. Certain command
line options, such as `-r' or `-N', will affect the default linker script.

对于始终必须成为链接一部分的其他系统库,也可以这样做。

可以在命令行中添加all,但最后有点单调乏味。

您提出任何错误或错误的结果,或者是什么?