首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >默认情况下链接的库

问默认情况下链接的库
EN

Stack Overflow用户
提问于 2011-08-06 22:03:32
回答 5查看 2.3K关注 0票数 6

我的代码正在测试中:

代码语言:javascript
复制
int main(){
return 0;
}

从它编译的可执行文件所依赖的动态共享库是:

代码语言:javascript
复制
$ 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)
  1. 我想知道这三个图书馆在扮演什么角色?
  2. main函数属于哪个库? /lib/libc.so.6?
  3. return属于哪个库? /lib/libc.so.6?
  4. 这三个库都是由gcc默认链接的动态吗?
  5. 如何找到gcc默认链接到的静态库?

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-06 22:10:01

  1. linux-gate.so并不是真正的共享库,而是内核的一部分,它的作用类似于共享库,并使快速系统调用成为可能。ld-linux.so是一段代码,它使加载其他共享库成为可能。libc.so是C库,包含像printf和strcpy这样的标准函数。
  2. main不属于任何库。它属于您的程序,因为它的组装版本完全存储在test二进制文件中。
  3. return不是函数,而是C语言结构。
  4. 不,它还链接在libgcc中,它显然不是您系统上的共享库(否则它会出现)和一些启动代码。g++还将链接到libstdc++.so ( C++标准库)和libm.so (C标准库的数学部分)中。
票数 3
EN

Stack Overflow用户

发布于 2011-08-06 22:09:26

  1. linux-gate是一个虚拟共享对象,充当内核内系统调用的连接。libc是glibc,它提供诸如printf()等功能。ld-linux是glibc加载器,它允许加载其他共享对象。
  2. main()属于您的代码。它由crt1.o调用,由gcc将其链接到可执行文件中(具体地说是ld )。
  3. return不是一个函数,而是一个语言结构,所以gcc将它直接转换为包含在对象(最终是可执行的)文件中的代码。另外,main()返回的值被crt1.o捕获并转换为程序结果代码。
票数 2
EN

Stack Overflow用户

发布于 2011-08-06 22:10:55

关于linux如何执行我的main()?的详细描述,您将在那里找到答案,可能还有更多!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6969225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档