我的代码正在测试中:
int main(){
return 0;
}从它编译的可执行文件所依赖的动态共享库是:
$ gcc -o test test.c
$ ldd test
linux-gate.so.1 => (0x00783000)
libc.so.6 => /lib/libc.so.6 (0x00935000)
/lib/ld-linux.so.2 (0x00ea5000)main函数属于哪个库? /lib/libc.so.6?return属于哪个库? /lib/libc.so.6?谢谢!
发布于 2011-08-06 22:10:01
linux-gate.so并不是真正的共享库,而是内核的一部分,它的作用类似于共享库,并使快速系统调用成为可能。ld-linux.so是一段代码,它使加载其他共享库成为可能。libc.so是C库,包含像printf和strcpy这样的标准函数。main不属于任何库。它属于您的程序,因为它的组装版本完全存储在test二进制文件中。return不是函数,而是C语言结构。libgcc中,它显然不是您系统上的共享库(否则它会出现)和一些启动代码。g++还将链接到libstdc++.so ( C++标准库)和libm.so (C标准库的数学部分)中。发布于 2011-08-06 22:09:26
linux-gate是一个虚拟共享对象,充当内核内系统调用的连接。libc是glibc,它提供诸如printf()等功能。ld-linux是glibc加载器,它允许加载其他共享对象。main()属于您的代码。它由crt1.o调用,由gcc将其链接到可执行文件中(具体地说是ld )。return不是一个函数,而是一个语言结构,所以gcc将它直接转换为包含在对象(最终是可执行的)文件中的代码。另外,main()返回的值被crt1.o捕获并转换为程序结果代码。发布于 2011-08-06 22:10:55
关于linux如何执行我的main()?的详细描述,您将在那里找到答案,可能还有更多!
https://stackoverflow.com/questions/6969225
复制相似问题