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

时间:2014-11-17 10:04:16

标签: c++ c shared-libraries static-libraries

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

对我来说有三个肯定:

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

我仍然怀疑第三次肯定......

你能告诉我这个吗?

1 个答案:

答案 0 :(得分:5)

使用静态库基本上就像链接.o.obj文件一样:在特定时间点链接到使用应用程序或库的所有实现。在此之后对静态库所做的更改将不会被链接它的代码自动获取...后者需要重新链接才能合并更改。

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

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