微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

您是否必须为新操作系统构建新的编译器?

我想在未来的某个时候建立一个操作系统,现在想一些关于它将如何的轻量级草图.我几乎已经在为Windows环境编译的C编码(和一些小Java).如果我想在Linux下运行它,我将不得不重新编译我的任何C程序.因此,对于每个操作系统,二进制文件(编译的产品)必须是不同的.如果我从头开始设计一个全新的操作系统,无论是业余爱好还是学术目的,都不使用Linux内核或操作系统的任何已知基本代码,我所理解的是,由于我的操作系统,我无法用GCC编译我的C程序不会是其目标系统之一.这里出现了关于标题的问题.提前感谢任何提示.

最佳答案
这取决于.您可以轻松地选择重用现有的编译器,例如远古的GCC示例,从而获得现有编译器的好处.但是必须清除一些重要的附带条件.

无论您是否选择构建新的编译器,挑战仍然是移植C库.从技术上讲,您可以在没有标准库的情况下使用C(例如Linux内核或任何自托管示例),但对于打算在操作系统下运行的程序来说,这是一个荒谬的主张,因为大多数系统都会施加内存限制等,这意味着您不能仅仅在使用内存方面拥有全权限制.因此,需要诸如malloc之类的C库调用.

由于您内核下的任何程序(很可能是您操作系统的99%)都需要一组链接功能,因此移植C库是您最大的任务. C库是一个庞大的巨石,写你自己的将是相当愚蠢的,尤其是many implementations already available,最着名的是GCC.所以,你真正应该问的问题是,你想写我自己的libc版本吗? (答案几乎总是没有,大多数替代实现都是针对小众用例.)另外,如果你想使你的OS POSIX兼容,那么你将不得不实现更多的功能,增加了麻烦.

您是否为自己的操作系统编写自己的编译器是一个细微的细节,与其中包含的C库相比.您始终可以将自己的编译器与已编写的C库实现一起使用.

我对你基于意见的问题的建议是:不.移植现有的编译器,如GCC或clang,然后使用它.另外,这有几个优点:

>与现有工具和工具链的兼容性
>熟悉的程序(用户无需学习如何使用新的编译器)
>他们是开源的 – 尽管如此,你一点也不疯狂.哎呀,即便是Apple将两个现有的编译器–GCC和clang – 集成到他们的工具链中而不是自己动手,而且他们是一家价值数十亿美元的公司.

看看this page.它演示了如何使用Newlib作为C库将GCC移植到您的操作系统.

原文地址:https://www.jb51.cc/linux/440193.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐