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

前端之家收集整理的这篇文章主要介绍了您是否必须为新操作系统构建新的编译器?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我想在未来的某个时候建立一个操作系统,现在想一些关于它将如何的轻量级草图.我几乎已经在为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.f2er.com/linux/440193.html

猜你在找的Linux相关文章