C标准库的位置

dev*_*ull 27 c gcc

在gcc手册中给出了"C标准库本身存储在'/usr/lib/libc.a'中".我安装了gcc,但在上述位置找不到libc.a. 很想知道它的位置.

我在/ usr/lib位置找到很多.so文件.那些是什么?

Chr*_*rle 25

一些东西:

  • gcc和glibc是两回事.gcc是编译器,glibc是运行时库.几乎所有东西都需要glibc才能运行.
  • .a文件是静态库,.so意味着共享对象,并且是Linux的等效DLL
  • 大多数事情都不与libc.a链接,它们链接libc.so

希望能为你解决这个问题.至于位置,它几乎肯定会在/usr/lib/libc.a和/或/usr/lib/libc.so.就像我说的,.so更常见.

  • libc.so和libc.a都提供相同的功能.不同之处在于,如果您链​​接到libc.so,每当libc.so升级时,您的程序都可以获得升级的好处,而无需进行任何更改.但是,如果您链​​接到libc.a,所有功能都打包到您的程序中.libc的新更新不会更新您的程序,因此必须重新编译. (10认同)
  • 所以是的,.so是动态链接的,而.a是静态链接的. (2认同)

rsc*_*hn2 25

如果您正在寻找libc.a:

$ gcc --print-file-name=libc.a
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libc.a
Run Code Online (Sandbox Code Playgroud)

  • 这是迄今为止最正确的答案 - 使用标准工具来查找 libc 的位置,它以任何方式*不*标准(正如我所发现的)。 (4认同)

pho*_*xis 6

如果您使用的是基于RPM的Linux(Red Hat/CentOS/Fedora/SUSE),那么您可以使用rpm -ql glibc和获取已安装的glibc的位置 rpm -ql glibc-devel.

locate libc.a会得到你的位置.并从它的位置看: rpm -qf /usr/lib/libc.a

以下是rpm -qi这些包的内容

的glibc-devel的:

glibc-devel包中包含开发使用标准C库(几乎所有程序都使用)的程序所需的目标文件.如果您正在开发将使用标准C库的程序,则系统需要提供这些标准目标文件才能创建可执行文件.如果要开发将使用标准C库的程序,请安装glibc-devel

glibc的:

glibc包中包含标准库,这些库由系统上的多个程序使用.为了节省磁盘空间和内存,以及使升级更容易,通用系统代码保存在一个地方并在程序之间共享.此特定包包含最重要的共享库集:标准C库和标准数学库.没有这两个库,Linux系统将无法运行.