我只是想知道如何用C ++创建一个独立程序?
编辑:独立我指的是一个不在托管环境中运行的程序(例如操作系统)。我希望我的程序成为计算机加载的第一个程序,而不是操作系统。
答案 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 ++程序。
答案 6 :(得分:0)
如果您使用的是BSD Unix,则可以使用独立库进行链接。这包括磁盘和tty的基本IO系统。您的源代码看起来与在Unix下运行的源代码相同,但二进制文件可以加载到裸机中。