在 C 程序中,如果我从 /usr/include 的头文件中调用函数,究竟会发生啥? [关闭]

Posted

技术标签:

【中文标题】在 C 程序中,如果我从 /usr/include 的头文件中调用函数,究竟会发生啥? [关闭]【英文标题】:In a C program, what exactly happens under the hood if I call a function from a header file from /usr/include? [closed]在 C 程序中,如果我从 /usr/include 的头文件中调用函数,究竟会发生什么? [关闭] 【发布时间】:2021-09-21 18:32:23 【问题描述】:

C 库函数的头文件可以在/usr/include 下找到。然而,实际的源文件似乎并不简单地位于文件系统中的任何位置。

那么,如果我从 C 程序中 /usr/include 的头文件中调用函数,究竟会发生什么?

【问题讨论】:

这里需要重点关注。 源代码已经被预编译到一个链接到您的程序的中。见***.com/questions/924485/… 你看过/usr/lib中的内容了吗? 这能回答你的问题吗? What's the difference between a header file and a library? 在建议的副本中查看社区 wiki 答案。接受的答案与您的问题不够接近。 【参考方案1】:

C 库的实现通常作为共享库 存储在系统中,该共享库通常具有 .so 扩展名。这些库通常位于 /usr/lib 中,尽管它们可以位于基于系统的其他位置。

当您的程序被编译和链接时,它会自动链接到 C 标准库。然后当它运行时,它会加载与其链接的共享库。

【讨论】:

谢谢! c标准库的共享库文件的名称是什么?如果它随时间变化,我会运行当前版本的 Ubuntu。 @cssdev 在您的 Ubuntu 系统上很可能是 glibc.so。在 /usr/lib 中查找名称中带有 libc 的共享对象。标准的通常是指向特定版本的符号链接。 “运行时c库”是libc.so.6 @h0r53:我没有“glibc.co”。 /usr/lib/directly 中与“libc*”匹配的唯一文件是“libcue.so.1 -> libcue.so.1.0.4”。是这个吗? 基于 Debian 的操作系统,例如 Ubuntu:/lib/x86_64-linux-gnu/libc.so.6 packages.ubuntu.com/focal/amd64/libc6/filelist ...... 否则 /lib64/libc.so.6

以上是关于在 C 程序中,如果我从 /usr/include 的头文件中调用函数,究竟会发生啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 c++/cmake 链接静态库

添加 /usr/include 作为 ios 应用程序的包含路径

使用 automake 将头文件放在 /usr/include 的子目录中?

第一章 入门

GCC相关的环境变量

Glib C:程序无法识别 GLIB 库