可执行文件、静态库和共享库之间的关系
Relations between executables, static libraries and shared libraries
我正在为一个项目编写一个构建系统,但我不确定可执行文件、静态库和共享库之间的联系。
对我来说,有三个肯定:
- 可执行文件可以使用静态库和共享库。 静态库
- 可以同时使用静态库和共享库。
- 共享库只能使用静态库。
我仍然对第三个肯定持怀疑态度...
你能启发我吗?
使用静态库基本上就像链接.o
或.obj
文件一样:在该特定时间点,所有实现都链接到使用应用程序或库。 在此时间之后对静态库所做的更改不会被链接它的代码自动拾取......后者需要重新链接,以便纳入这些变化。
将链接推迟到运行时,这意味着每次使用共享库的代码调用其中的某些功能时,都会使用在运行时找到的共享库版本。 只要更改不影响公共 API,您就可以替换共享库,在运行时找到它的应用程序将获取更新/更改,而无需修改/重新链接它们。
所以,是的,可执行文件可以同时使用两者,静态库可以同时使用两者,而你的第三个"肯定"是错误的:共享库也可以同时使用两者。 这只是意味着共享库本身可以使用静态库中的功能快照,或者它可能在运行时从另一个共享库中找到其他功能。
相关文章:
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 移动语义和深层/浅层复制之间有什么关系?
- #include < conio.h> 和 getch() 方法之间的关系是什么?
- 超市管理系统的类别之间应该是什么关系?
- 指针和程序性能之间有什么关系吗?
- node.h/node.cpp/nodelist.cpp之间的关系
- 运行线程和线程对象之间的关系
- 类型大小与其值范围之间的关系?
- 2个期货之间的依赖关系
- Qt:工作线程和 GUI 事件之间的关系
- 如何强制 qbs 产品与依赖关系之间的同步?
- 在头文件和 .cc 文件之间建立关系
- C 和Windows OS之间的关系
- 为什么赋值运算符和相等运算符之间没有 1:1 的关系?
- QComboBox 在 editTextChanged 和 currentIndexChanged 之间的关系
- 使用 .depends 指定 SUBDIRS 项目之间的依赖关系不起作用
- 各种初始化和构造之间的关系
- 变量之间的关系
- 有符号整数类型的最小值和最大值之间关系的C++标准保证是什么