【发布时间】:2011-08-09 22:36:36
【问题描述】:
我最近开始探索生成代码使用 C++ 运行时库的方式。
主要是我很好奇,但我也想评估开发在 C++ 中启动内核所需的最少内容所需的工作量。
所以我开始实现自己的运行时库,但我有一个小问题。
int main(int argc, char **argv)
{
return 0;
}
使用以下命令编译:
$ g++ -ffreestanding -nostdlib -fno-builtin -fno-rtti -fno-exceptions -c main.cpp
我收到此警告:
/usr/bin/ld:警告:找不到入口符号_start;默认为 00000000080480b8
然后,当我尝试执行生成的二进制文件时,我得到一个“分段错误”。 我尝试编译“main.cpp”和一个 ASM 文件。
[global _start]
[extern main]
_start:
call main
使用“ld”手动链接目标文件,我没有收到警告,但二进制文件仍在引发“分段错误”。
我想我错过了什么。可能在调用“main”之前和之后必须做一些事情,就像系统 C 库在“__libc_start_main”中所做的那样。
另外,如果有人对我应该阅读的有关该主题的网站、文档或书籍有任何推荐,我将不胜感激。
谢谢,
帕特里克
【问题讨论】: