我读到那个
具有内部链接的函数仅在一个翻译单元内可见。当编译器编译具有内部链接的函数时,编译器会在某个地址为该函数编写机器代码,并将该地址放入对该函数的所有调用中(都在一个翻译单元中),但删除所有提及“.o”文件中的函数。
我编译了这段代码
int g_i{}; //extern
static int sg_i{}; //static
static int add(int a, int b) //internal linakge!
{
return a+b;
}
int main()
{
static int s_i{}; //static - local
int a_i{}; //auto - local
a_i = add(1,2);
return 0;
}
并使用g++ -c 编译并创建了我的main.o 文件然后尝试nm -C main.o 我得到这个结果:
0000000000000000 b .bss
0000000000000000 d .data
0000000000000000 p .pdata
0000000000000000 r .rdata$zzz
0000000000000000 t .text
0000000000000000 r .xdata
U __main
0000000000000000 t add(int, int)
0000000000000004 b sg_i
0000000000000008 b main::s_i
0000000000000000 B g_i
0000000000000014 T main
你能解释一下为什么目标文件中仍然提到了这些内部标识符,而我听说使用这些目标文件的链接器不知道它们的存在吗?
谢谢。
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容