我正在为一个项目编写构建系统,我不确定可执行文件、静态库和共享库之间的链接。
对我来说,有三个肯定:
- 可执行文件可以同时使用静态库和共享库。
- 静态库可以同时使用静态库和共享库。
- 共享库只能使用静态库。
我对第三个肯定还有疑问...
你能给我解释一下吗?
最佳答案
使用静态库基本上就像链接.o
或.obj
文件:所有实现都在特定时间点链接到使用中的应用程序或库。在那之后对静态库所做的更改不会被链接它的代码自动获取...后者需要重新链接才能合并更改。
共享库将链接延迟到运行时,这意味着每次使用共享库的代码调用其中的某些功能时,都会使用在运行时找到的共享库版本。只要更改不影响公共(public) API,您就可以替换共享库,并且在运行时找到它的应用程序将获取更新/更改,而无需修改/重新链接它们自己。
所以,是的,可执行文件可以同时使用两者,静态库可以同时使用两者,而您的第三个“肯定”是错误的:共享库也可以同时使用两者。这只是意味着共享库本身可能会使用来自静态库的功能快照,或者它可能会在运行时从另一个共享库中找到其他功能。
关于c++ - 可执行文件、静态库和共享库之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26970089/