如何在我的内核中使用STLPort?

时间:2011-09-19 11:39:55

标签: c++ kernel osdev stlport

我正在用C ++开发内核。但我不想写stdlib;为此,我已下载STLport http://www.stlport.org/,但我不知道如何安装和使用它。

我正在使用Linux来构建我的内核。

如何在内核中使用c ++标准库?

我不想从STLport移植所有库。如何排除一系列库?与std::stringstd::vector

相同

3 个答案:

答案 0 :(得分:3)

我可能会建议不要在内核开发中使用STL。 STL将假设某种形式的标准库支持,在您的内核中没有。此外,大多数内存分配操作都没有时间限制,因此不适合在中断处理程序中使用。例外是另一件可能导致内核严重问题的事情

答案 1 :(得分:3)

为了使STL工作,你必须移植几个东西,比如静态初始化(例如std :: cin和std :: cout)和堆栈展开......

你必须移植,即:libsupc ++并在你的内核中使用它。 基本上所有这些东西都不应该放在内核中。 不要使用向量使用静态数组,因为向量可能会重新分配您的数据!

所有这些东西都会让你的内核一无所获!

你可以看一下L4允许自己在内核中使用的内容。他们不做内存分配,也不做异常(不可预测),特别是不做STL。

后面的链接应该让您知道为了获得c ++操作系统支持而需要移植的内容。 Libsupc ++是gcc的一部分。它的目的是封装所有需要运行时代码的部分。

Useful information about libsupc++

Useful information about c++ operating system support

答案 2 :(得分:2)

我不确定内核中的STL是否真的很好用,但如果你真的想尝试,那就非常有趣。我编写了自己的操作系统,当我在内核中进行内存分配时,我做的第一件事就是移植STLport(5.2.1)。到目前为止它运行良好,虽然内核本身仍然是初步的。

无论如何,我可以分享一些移植它的经验。

  1. 移植STLport不需要构建和很少的先决条件,只需包含头文件并让编译器知道它的路径(gcc的-I选项)。模板类将使用您的cpp源文件进行编译。

  2. STLport是可配置的,您可以禁用您无法承受的功能并选择您想要的内容,例如iostream,debug,exception,RTTI和threading。只需签出文档,然后进入配置标题,它就会很好地评论(例如stlport / stl / config / user_config.h)

  3. 作为最基本的,您需​​要mallocfree,或者newdelete和变体。这足以移植std字符串,容器和算法,IIRC。但它既不是线程安全也不是内存分配优化,当你依赖它时需要非常小心。

  4. 你可以拥有自己的iostream,它只是模板类和全局对象(BTW,我攻击了ELF部分并通过调用函数手动初始化了我的全局对象),但这需要更多的工作。

    < / LI>

    This link是我的OS项目的github,我希望它可以给你一些灵感。