我最近开始研究生成的代码使用C++运行时库的方式。在没有运行时库的情况下在Linux下编译C++
大部分我都很好奇,但我也想评估开发C++中的内核所需的最小内核所需的工作量。
所以我开始实现我自己的运行时库,但我有一个小问题。
int main(int argc, char **argv)
{
return 0;
}
用下面的命令编译此:
$克++ -ffreestanding -nostdlib -fno-内置-fno-RTTI -fno-例外-c main.cpp中
我得到这个警告:
/usr/bin/ld:warning:找不到条目符号_start;默认为00000000080480b8
然后,当我尝试执行产生的二进制文件时,出现“分段错误”。 我试图编译“main.cpp”和一个ASM文件。
[global _start]
[extern main]
_start:
call main
链接对象的文件以“LD”手动,我没有报警,但二进制还是养中“segmentation fault”。
我想我错过了一些东西。例如,在系统C库在“__libc_start_main”中执行“main”调用之前和之后,可能需要执行某些操作。此外,如果有人对我应阅读的有关该主题的网站,文档或书籍有任何建议,我将非常感激。
感谢,
帕特里克
[如何构建最简单的Unix可执行文件](http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html) – QuantumMechanic 2011-04-21 00:51:19
仅供参考,'_start'在CRT中。 – 2011-04-21 00:54:15