当我们使用gdb调试程序时,我们通常会看到在libc(glibc?)中定义了奇怪名称的函数.我的问题是:
caf*_*caf 69
libc同时实现标准C函数strcpy()和POSIX函数(可能是系统调用)getpid().请注意,并非所有标准C函数都在libc- 大多数数学函数都在libm.
您不能以调用普通函数的方式直接进行系统调用,因为对内核的调用不是正常的函数调用,因此链接器无法解析它们.相反,特定于体系结构的汇编语言thunk用于调用内核 - 您当然也可以直接在自己的程序中编写它们,但是您不需要因为libc它们为您提供它们.
请注意,在Linux中,它是内核的组合,并libc提供POSIX API. libc添加了相当数量的值 - 并非每个POSIX函数都必须是系统调用,而对于那些函数,内核行为并不总是符合POSIX.
libc是一个单独的库文件(两个.so和.a版本都可用),在大多数情况下驻留在/usr/lib.但是,glibc(GNU libc)项目提供的不仅仅是libc- 它还提供了libm前面提到的,以及其他核心库libpthread.所以libc只是glibc提供的库之一 - libc除了glibc之外还有其他替代实现.
dus*_*uff 18
关于前两个,glibc既是C标准库(例如,"标准C函数"),也是系统调用的包装器.你不能直接发出系统调用,因为编译器不知道如何 - glibc包含发出系统调用所必需的"粘合剂",这是用汇编语言编写的.(有可能自己重新实现,但它比它的价值要麻烦得多.)
(C++标准库是一个单独的东西;它被称为libstdc++.)
glibc不是一个单独的.so(动态库)文件 - 有一堆,但libc和libm是最常用的两个.所有静态和动态库都存储在/lib.
libc是一个通用术语,用于指代所有C标准库 - 有几个.glibc是最常用的一种; 其他包括eglibc,uclibc和dietlibc.
这是“标准库”。它就像Windows世界中的“MSVCRTL”。
Gnu 标准库(“glibc”)是 Linux 系统上最常见(几乎普遍?)的 libc 实现。以下是旧 SusE Linux 系统上的相关文件:
ls -l /lib =>
-rwxr-xr-x 1 root root 1383527 2005-06-14 08:36 libc.so.6
ls -l /usr/lib =>
-rw-r--r-- 1 root root 2580354 2005-06-14 08:20 libc.a
-rw-r--r-- 1 root root 204 2005-06-14 08:20 libc.so
Run Code Online (Sandbox Code Playgroud)
此链接应该可以回答您可能遇到的任何其他问题(包括对完整 GLibc 源代码的引用):
| 归档时间: |
|
| 查看次数: |
18914 次 |
| 最近记录: |