我正在研究glibc的源代码。我在编译 glibc 时发现我得到了一些 .o obj 和一些 .os obj。例如,有一个 dl-load.o,以及一个 dl-load.os。那么,它们之间有什么区别呢?
谢谢!一鸣
我正在研究glibc的源代码。我在编译 glibc 时发现我得到了一些 .o obj 和一些 .os obj。例如,有一个 dl-load.o,以及一个 dl-load.os。那么,它们之间有什么区别呢?
谢谢!一鸣
设置:glibc2.3.4
实验
首先,nm onglibc/bld/close.{o,os}
表示只close.o
定义syscall_error
了。然后,编写一个简单的程序来检测是否syscall_error
在close()
.
#include <unistd.h>
#include <stdio.h>
int main() {
return close(fileno(stdin));
}
gcc -o s.out -static -g a.c
gcc -o d.out -g a.c
结果
gdb
表明仅close()
在s.out
利用syscall_error
. 因此 .o 文件用于static library
而 .os 用于dynamic library
.