你如何创建一个独立的C ++程序?

时间:2010-01-18 22:13:26

标签: c++

我只是想知道如何用C ++创建一个独立程序?

编辑:独立我指的是一个不在托管环境中运行的程序(例如操作系统)。我希望我的程序成为计算机加载的第一个程序,而不是操作系统。

7 个答案:

答案 0 :(得分:11)

看一下这篇文章:

http://www.codeproject.com/KB/tips/boot-loader.aspx

你需要一个小的汇编启动代码来获得main(),但是你可以用C ++编写其余的代码。如果要在运行时创建对象,则必须编写自己的堆管理器(new / delete),如果需要多个线程,则必须编写自己的调度程序。

答案 1 :(得分:5)

请参阅此页:http://wiki.osdev.org/C++

使用更受欢迎的工具链,使用c ++作为核心语言,开始编写操作系统是必不可少的。

此外,此页面应该非常有用:http://wiki.osdev.org/C++_Bare_Bones。它几乎引导您进入操作系统的c ++入口点。

答案 2 :(得分:2)

即使你的澄清,答案是它取决于 - 确切的启动顺序取决于硬件 - 尽管有相当多的共性。引导加载程序通常以绝对地址加载,并且它所包含的文件经常按原样读入内存。这意味着您通常使用“链接定位器”而不是普通链接器。如果典型的链接器生成可执行文件以备重定位和加载,则定位器会生成一个已设置为在一个确切地址运行的可执行文件,并且已应用所有重定位。对于那些已经足够记住它们的人来说,它通常非常像MS-DOS .COM文件。

除此之外,它必须(当然)静态链接程序所依赖的整个运行时 - 它不能依赖于DLL或共享对象库之类的东西,因为加载任何一个的代码那些还没有装满。

答案 3 :(得分:2)

谷歌'嵌入式c ++'开始

另一个想法是从嵌入式系统仿真器开始,例如atmel AVR站点有一个很好的IDE模拟atmel AVR系统,并允许您在C中构建原始代码并将其加载到模拟CPU中,他们使用gcc作为工具链(我认为)

答案 4 :(得分:2)

embedded systems programming中使用C ++,甚至可以编写OS内核。

通常在启动顺序的早期至少有一些汇编指令。有一些事情更容易表达,或者您可能需要使用来自CPU供应商的参考代码。

对于初始启动过程,您将无法使用标准库。没有例外,RTII,新/删除。它又回到了“C with classes”。大多数人只是在这里使用C.

如果您已经加载了足够的支持基础架构,则可以使用可以移植的标准库的任何部分。

答案 5 :(得分:2)

您需要一个提供以下内容的环境:

  • 一个正常工作的C库,或足够的它来做你想做的事情
  • 您打算使用的C ++运行时的各个部分。这是特定于编译器的

除了任何其他库。如果您的平台上没有动态链接器(如果您没有操作系统,则可能没有链接器),那么您必须将其全部静态链接。

实际上,这意味着链接一些小型C ++运行时和适合您平台的C库。然后你可以简单地编写一个独立的C ++程序。

答案 6 :(得分:0)

如果您使用的是BSD Unix,则可以使用独立库进行链接。这包括磁盘和tty的基本IO系统。您的源代码看起来与在Unix下运行的源代码相同,但二进制文件可以加载到裸机中。