可执行文件、静态库和共享库之间的关系

Relations between executables, static libraries and shared libraries

本文关键字:之间 关系 共享 静态 可执行文件      更新时间:2023-10-16

我正在为一个项目编写一个构建系统,但我不确定可执行文件、静态库和共享库之间的联系。

对我来说,有三个肯定:

  • 可执行文件可以使用静态库和共享库。
  • 静态库
  • 可以同时使用静态库和共享库。
  • 共享库只能使用静态库。

我仍然对第三个肯定持怀疑态度...

你能启发我吗?

使用静态库基本上就像链接.o.obj文件一样:在该特定时间点,所有实现都链接到使用应用程序或库。 在此时间之后对静态库所做的更改不会被链接它的代码自动拾取......后者需要重新链接,以便纳入这些变化。

共享库

将链接推迟到运行时,这意味着每次使用共享库的代码调用其中的某些功能时,都会使用在运行时找到的共享库版本。 只要更改不影响公共 API,您就可以替换共享库,在运行时找到它的应用程序将获取更新/更改,而无需修改/重新链接它们。

所以,是的,可执行文件可以同时使用两者,

静态库可以同时使用两者,而你的第三个"肯定"是错误的:共享库也可以同时使用两者。 这只是意味着共享库本身可以使用静态库中的功能快照,或者它可能在运行时从另一个共享库中找到其他功能。