我正在用C++开发一个内核。但我不想写stdlib;为此,我下载了STLport http://www.stlport.org/,但我不知道如何安装和使用它。
我使用Linux来构建我的内核。
如何在内核中使用c++标准库?
而且我不想从STLport移植所有的库。如何排除选定的库?如std::string、std::vector等。
发布于 2011-09-20 00:15:53
为了让STL工作,你必须移植一些东西,比如静态初始化(比如std::cin和std::cout)和堆栈展开……
您必须移植libsupc++,并将其放入内核中。基本上,所有这些东西从一开始就不应该在内核中。不要使用向量,使用静态数组,因为向量可能会重新分配数据!
而且,所有这些东西都会让你的内核毫无意义地膨胀!
你可以看看L4允许自己在内核中使用什么。它们不做内存分配,也不做异常(不可预测),特别是不做STL。
后面的链接将使您了解需要移植哪些内容才能获得c++操作系统支持。Libsupc++是gcc的一部分。它的目的是封装所有需要运行时代码的部分。
Useful information about libsupc++
Useful information about c++ operating system support
发布于 2011-09-19 20:57:11
我可能会建议不要在内核开发中使用STL。STL将假定某种形式的标准库支持,这在您的内核中是没有的。而且,大多数内存分配操作都没有时间限制,因此不适合在中断处理程序中使用。异常是另一件会在内核中引起严重问题的事情
发布于 2012-10-08 21:03:18
我不确定内核中的STL是否真的值得拥有,但如果你真的想尝试一下,它是非常有趣的。我已经编写了自己的操作系统,当我在内核中分配内存时,我做的第一件事就是移植STLport (5.2.1)。到目前为止,它工作得很好,尽管内核本身还太初级。
无论如何,我可以分享一些移植它的经验。
作为最基本的
malloc和free,或者new,delete和变种。这足以移植std字符串、容器和算法,IIRC。但它既不是线程安全的,也不是优化的内存分配,当你依赖它时,你需要非常小心。https://stackoverflow.com/questions/7470346
复制相似问题