Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linker 为什么主方法和其他方法不一样_Linker - Fatal编程技术网

Linker 为什么主方法和其他方法不一样

Linker 为什么主方法和其他方法不一样,linker,Linker,在下面的程序中,我想知道为什么main不会像其他方法一样损坏: int main() { } int main1() { } 如果我检查出nm,我看到主方法没有损坏,而main1是。我尝试使用#pragma条目将程序条目从main更改为main1,但没有效果 谢谢你在这方面的帮助 如果我检查出nm,我会看到main方法没有损坏,而main1没有损坏 main符号在几个方面都很特殊: 你不能记下它的地址 你不能自己叫它 它不能被损坏,因为标准C运行时库将通过unmangledmainn

在下面的程序中,我想知道为什么main不会像其他方法一样损坏:

int main()
{

}

int main1() 
{

}
如果我检查出nm,我看到主方法没有损坏,而main1是。我尝试使用#pragma条目将程序条目从main更改为main1,但没有效果

谢谢你在这方面的帮助

如果我检查出nm,我会看到
main
方法没有损坏,而
main1
没有损坏

main
符号在几个方面都很特殊:

  • 你不能记下它的地址
  • 你不能自己叫它
  • 它不能被损坏,因为标准C运行时库将通过unmangled
    main
    name调用它

<>所以它没有被破坏,因为C++标准需要。另请参见。

向后兼容性?我猜链接器会搜索一个未损坏的
main
。类似于为什么使用#pragma条目更改程序的入口点对它没有影响?基于这些建议,我进一步阅读了#pragma行为。似乎pragma支持依赖于编译器,我找到了g++支持的-Wunknown pragmas标志,看看g++编译器是否理解pragma。似乎编译器不支持#pragma entry或#pragma comment(linker…),因此main()方法不会被破坏,而main1()则会被破坏,尽管将入口点更改为main1()。