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

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

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

对我来说,有三个肯定:

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

我对第三个肯定还有疑问...

你能给我解释一下吗?

最佳答案

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

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

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

关于c++ - 可执行文件、静态库和共享库之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26970089/

相关文章:

C - 指针算术

c - 扫描文本文件中的数字并查找总和、最大数字和乘积

c++ - Boost multi_array 范围编译

c++ - Visual Studio 2017 C++ : Missing includes on cloned git repository

c - 使用一个进程向多个其他进程发送信号 "simultaneously"

自定义 C 库 : can functions in the same library refer to each other?

python-3.x - 在 Ubuntu 上的 Python 3 virtualenv 下安装 PySide

c++ - 是否有带有 DEBUG dll 的 VC++ 2008 Redistributable Package 版本?

C++ LogIn.exe 在终端中崩溃

c++ - 创建自己的vector Class,错误很多