你没有链接所有的 libc

主要观点:在 OpenBSD 上,通过链接 libc 可与内核交互,这让其他语言的支持者感到困扰,但其并非链接全部 libc
关键信息:

  • 以 /bin/ls 和 /usr/lib/libc.a 为例,ls 静态链接但小于 libc.a,并非链接全部。
  • libc.a 是 ar 归档文件,包含一堆对象文件,如 malloc.o 和 open.o 等,且 malloc 代码多于 open。
  • 链接时通过 ranlib 生成符号索引,链接归档文件时概念上会提取对象文件并添加到命令行,好的链接器更复杂些。
  • 静态链接时将 libc 拆分为多个对象文件可更精细链接,动态链接规则不同,且 cool kids 只做静态链接。
  • OpenBSD 上链接 libc 更像指南,并非魔法,可写非 C 代码实现相同功能。
    重要细节:通过具体代码示例如 cc -c funtime.c 等展示了相关操作过程,包括生成库、提取对象文件及查看内容等。帖子时间为 2025 年 2 月 12 日 18:54 并更新。标签有 [c]、[openbsd]、[programming]。
阅读 7
0 条评论