在使用GCC进行编译时可以链接汇编但不能与G ++进行链接,为什么以及如何修复?

时间:2017-05-26 19:23:46

标签: gcc g++

我一直认为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 ++保持标签不变?

1 个答案:

答案 0 :(得分:0)

g++会将输入文件(即使扩展名为.c)也视为C ++,因此会破坏函数名称,除非它们被标记为extern "C"。因此kernel_main变成了_Z11kernel_mainv之类的东西。