我正在为项目编写构建系统,我不确定可执行文件,静态库和共享库之间的链接。
对我来说有三个肯定:
我仍然怀疑第三次肯定......
你能告诉我这个吗?
答案 0 :(得分:5)
使用静态库基本上就像链接.o
或.obj
文件一样:在特定时间点链接到使用应用程序或库的所有实现。在此之后对静态库所做的更改将不会被链接它的代码自动获取...后者需要重新链接才能合并更改。
共享库将链接推迟到运行时,这意味着每次使用共享库的代码调用其中的某些功能时,都会使用在运行时找到的共享库的版本。只要更改不影响公共API,您就可以替换共享库,并且在运行时找到它的应用程序将获取更新/更改,而无需自行修改/重新链接。
所以,是的,可执行文件可以同时使用它们,静态库可以同时使用它们,而 第三个“肯定”是错误的:共享库也可以同时使用 。它只是意味着共享库本身可以使用静态库中的功能快照,或者它可以在运行时从另一个共享库中找到其他功能。