compilation - glibc中的.o和.os objs有什么区别

标签 compilation glibc

我正在研究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/

相关文章:

linux - 为什么 sem_t 在 64 位 linux 中是 32 字节?

java - 在 uClinux 上更新 java

c++ - Objective-C++ 未编译

c - 是否可以通过向 gcc 传递参数来声明弱函数?

GWT 编译 - 为什么只有一个 user.agent 选项后仍然有 5 个排列?

c - glibc rand函数实现

c - 套接字事件如何传播/转换为 epoll?

c - “%d”需要类型为 'int' 的参数,但参数 2 的类型为 'long unsigned int' [-Wformat=]

c# - 在持续集成中优化编译时间

c - 启用/禁用硬件锁省略