在 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 的头文件中调用函数,究竟会发生啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
添加 /usr/include 作为 ios 应用程序的包含路径