我正在用C ++开发内核。但我不想写stdlib
;为此,我已下载STLport
http://www.stlport.org/,但我不知道如何安装和使用它。
我正在使用Linux来构建我的内核。
如何在内核中使用c ++标准库?
我不想从STLport移植所有库。如何排除一系列库?与std::string
,std::vector
等
答案 0 :(得分:3)
我可能会建议不要在内核开发中使用STL。 STL将假设某种形式的标准库支持,在您的内核中没有。此外,大多数内存分配操作都没有时间限制,因此不适合在中断处理程序中使用。例外是另一件可能导致内核严重问题的事情
答案 1 :(得分:3)
为了使STL工作,你必须移植几个东西,比如静态初始化(例如std :: cin和std :: cout)和堆栈展开......
你必须移植,即:libsupc ++并在你的内核中使用它。 基本上所有这些东西都不应该放在内核中。 不要使用向量使用静态数组,因为向量可能会重新分配您的数据!
所有这些东西都会让你的内核一无所获!
你可以看一下L4允许自己在内核中使用的内容。他们不做内存分配,也不做异常(不可预测),特别是不做STL。
后面的链接应该让您知道为了获得c ++操作系统支持而需要移植的内容。 Libsupc ++是gcc的一部分。它的目的是封装所有需要运行时代码的部分。
答案 2 :(得分:2)
我不确定内核中的STL是否真的很好用,但如果你真的想尝试,那就非常有趣。我编写了自己的操作系统,当我在内核中进行内存分配时,我做的第一件事就是移植STLport(5.2.1)。到目前为止它运行良好,虽然内核本身仍然是初步的。
无论如何,我可以分享一些移植它的经验。
移植STLport不需要构建和很少的先决条件,只需包含头文件并让编译器知道它的路径(gcc的-I选项)。模板类将使用您的cpp源文件进行编译。
STLport是可配置的,您可以禁用您无法承受的功能并选择您想要的内容,例如iostream,debug,exception,RTTI和threading。只需签出文档,然后进入配置标题,它就会很好地评论(例如stlport / stl / config / user_config.h)
作为最基本的,您需要malloc
和free
,或者new
,delete
和变体。这足以移植std字符串,容器和算法,IIRC。但它既不是线程安全也不是内存分配优化,当你依赖它时需要非常小心。
你可以拥有自己的iostream,它只是模板类和全局对象(BTW,我攻击了ELF部分并通过调用函数手动初始化了我的全局对象),但这需要更多的工作。
< / LI> 醇>This link是我的OS项目的github,我希望它可以给你一些灵感。