c - 使用 `ar -rc` 与 libtool 有什么区别?

标签 c static-libraries

我是 C 库新手,我正在创建一个不允许使用 libtool 的项目。

我尝试在网上查找,但一切要么 super 困惑,要么只是如何制作,没有任何解释。

我有几个问题:

  • .a 库只是 .o 文件的集合吗?
  • 使用 ar -rclibtool 有什么区别?
  • 当链接器链接库时,它会链接整个 .a 文件还是仅链接它需要的部分?

最佳答案

Q: Are .a libraries just a collection of .o files?

答:基本上是的。

目标文件需要以特定的 archive library format 进行组织。链接器将无法使用存档除非它识别该格式。因此需要“ar”和“libtool”等工具。

Q: When the linker goes to link a library does it link the whole .a file or just the part it needs?*

答:只有实际需要的目标代码才会被物理添加到可执行镜像中。

Q: What is the difference between using ar -rc vs libtool?

“ar”自 Unix 诞生之初就已存在;早在“动态库”被发明(对于 *nix)之前,在 Linus Torvalds 想到 Linux 之前,或者在 Gnu 存在之前。 “libtool”是一个 Gnu 工具,支持动态和静态库,并且具有许多超出基本“ar”功能的功能。

关于c - 使用 `ar -rc` 与 libtool 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71729766/

相关文章:

c - C 结构/union 的可移植性问题

c - 我怎样才能让这段代码重复主要功能

C unix 域套接字,recvfrom() 不设置 struct sockaddr* src_addr

objective-c - 从在 ARC 下包装第 3 方 C++ 对象的类返回 C 样式数组是否安全?

iphone - Xcode——将一个静态库嵌入到另一个静态库中?

android - 使用 ARM neon 将短数组转换为 float

c - 类真的是下一个 C 标准的当前提案吗?

c++ - Visual Studio 2015 社区 ZeroMQ 静态库链接错误

c++ - 如何从可从 C++ 代码调用的 Ada 源构建静态库?

objective-c - 使用静态库中的图像