我正在研究glibc的源代码。我发现在编译 glibc 时我得到了一些 .o objs 和一些 .os objs。例如,有一个 dl-load.o,还有一个 dl-load.os。那么,它们之间有什么区别呢?
谢谢! 一鸣
最佳答案
设置:glibc2.3.4
实验
首先,glibc/bld/close.{o,os}
上的 nm 显示只有 close.o
定义了 syscall_error
。
然后,编写一个简单的程序来检测close()
中是否使用了syscall_error
。
#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
显示只有 s.out
中的 close()
使用了 syscall_error
。因此,.o 文件用于静态库
,而.os 用于动态库
。
关于compilation - glibc中的.o和.os objs有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16344198/