我一直认为C ++是C,顶部有一些库。我认为任何C程序都可以用g ++编译,我似乎错了。
我有一些可以作为
的汇编代码_start:
b kernel_main
然后我在main中有一些c代码。
如果我编译并链接gcc,一切正常。如果我尝试用G ++编译相同的代码(绝对没有变化,甚至没有文件扩展名) 我收到错误:
In function `_start':
(.init+0x4): undefined reference to `kernel_main'
所以G ++无法找到kernel_main标签。经过进一步检查(反汇编二进制文件),似乎g ++将kernel_main标签更改为_Z11kernel_mainv
。有没有办法告诉g ++保持标签不变?
答案 0 :(得分:0)
g++
会将输入文件(即使扩展名为.c
)也视为C ++,因此会破坏函数名称,除非它们被标记为extern "C"
。因此kernel_main
变成了_Z11kernel_mainv
之类的东西。