【问题标题】:Why is main method not mangled similar to other methods为什么 main 方法不像其他方法那样被破坏
【发布时间】:2014-12-20 13:36:26
【问题描述】:

在下面的程序中,我想知道为什么 main 没有像其他方法一样被破坏:

int main()
{

}

int main1() 
{

}

如果我检查了 nm,我发现 main 方法没有被破坏,而 main1 是。我尝试使用#pragma entry将程序条目从main更改为main1,但没有效果。

感谢您对此的帮助。

【问题讨论】:

  • 向后兼容?我猜链接器会搜索未损坏的main
  • 那为什么用#pragma entry改变程序的入口点对它没有影响呢?
  • 根据建议,我进一步阅读了#pragma 行为。似乎 pragma 支持取决于编译器,我发现 g++ 支持的 -Wunknown-pragmas 标志以查看 g++ 编译器是否理解 pragma。似乎编译器不支持 #pragma entry 或 #pragma comment(linker...) ,因此 main() 方法没有被破坏,而 main1() 尽管将入口点更改为 main1()。

标签: linker


【解决方案1】:

如果我检查了 nm,我发现 main 方法没有被破坏,而 main1 是。

main 符号在几个方面特殊

  • 您无法获取其地址
  • 你不能自己调用​​它
  • 不得被破坏,因为标准 C 运行时库将通过未破坏的 main 名称调用它。

所以它没有被破坏,因为 C++ 标准要求这样做。另见this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 2022-01-17
    • 2015-09-19
    • 1970-01-01
    相关资源
    最近更新 更多