我正在用 C++ 开发内核。但我不想写一个stdlib
;为此我下载了STLport
http://www.stlport.org/,但我不知道如何安装和使用它。
我正在使用 Linux 来构建我的内核。
如何在我的内核中使用 c++ 标准库?
而且我不想从 STLport 移植所有库。如何排除选择的库?像std::string
等std::vector
。
我正在用 C++ 开发内核。但我不想写一个stdlib
;为此我下载了STLport
http://www.stlport.org/,但我不知道如何安装和使用它。
我正在使用 Linux 来构建我的内核。
如何在我的内核中使用 c++ 标准库?
而且我不想从 STLport 移植所有库。如何排除选择的库?像std::string
等std::vector
。
我可能会建议不要在内核开发中使用 STL。STL 将假定某种形式的标准库支持,而您的内核中没有这种支持。此外,大多数内存分配操作都没有时间限制,因此不适合在中断处理程序中使用。异常是另一件事可能会导致内核中的主要问题
为了让 STL 工作,你必须移植一些东西,比如静态初始化(例如 std::cin 和 std::cout)和堆栈展开......
您必须移植 ie: libsupc++ 并将其包含在您的内核中。基本上所有这些东西一开始就不应该在内核中。不要使用向量使用静态数组,因为向量可能会重新分配您的数据!
而且所有这些东西都会让你的内核膨胀!
你可以看看 L4 允许自己在内核中使用什么。他们不做内存分配,也不做异常(不可预测),尤其是不做 STL。
后面的链接将让您了解需要移植哪些内容才能获得 c++ 操作系统支持。Libsupc++ 是 gcc 的一部分。它的目的是封装需要运行时代码的所有部分。
我不确定内核中的 STL 是否真的很好,但如果你真的想尝试,它很有趣。我已经编写了自己的操作系统,当我在内核中分配内存时,我做的第一件事就是移植 STLport (5.2.1)。到目前为止它运行良好,尽管内核本身仍然太初级。
无论如何,我可以分享一些移植它的经验。
移植 STLport 不需要构建和很少的先决条件,只需包含头文件并让编译器知道它的路径(gcc 的 -I 选项)。模板类将与您的 cpp 源文件一起编译。
STLport是可配置的,你可以禁用你买不起的,选择你想要的,比如iostream、debug、exception、RTTI和threading。只需查看文档,然后查看配置标题,它的注释非常好(例如 stlport/stl/config/user_config.h)
作为最基本的,您将需要malloc
and free
,或者也许new
, delete
and 变体。这对于移植标准字符串、容器和算法、IIRC 来说已经足够了。但它既不是线程安全的,也不是内存分配优化的,你在依赖它时需要非常小心。
您可以拥有自己的 iostream,它只是模板类和全局对象(顺便说一句,我破解了 ELF 部分并通过调用函数手动初始化了我的全局对象),但这需要更多的工作。