c++linux中的静态链接用法:每次更改库时,是否需要重新编译所有内容

Static linkage usage in c++ linux: do I need to recompile everything each time I change library?

本文关键字:新编译 编译 是否 链接 用法 静态 c++linux      更新时间:2023-10-16

我有一个程序,它在编译(使用eclipse-cdt)时使用-L(mylib.a)静态链接到linux中的另一个库。

据我所知,链接是静态的这一事实意味着库被插入到我的二进制文件中。这是否意味着,如果我对mylib进行更改,我需要重新编译二进制文件?我想是的,但我想确定一下,因为这是一个很大的时间开销。请注意,如果对mylib进行了更改,那么eclipse会识别出需要重新编译它,但它不会识别出二进制文件本身需要重新编译,即使它链接到了mylib。

如果不更改库的接口(即头),只需重新链接即可。

是的,您应该用修改后的库重新生成代码,以生成链接到新的和更新的库的二进制文件。

项目的构建可以分为两个里程碑阶段:
编译:
在此阶段,编译器编译每个翻译单元。它检查源代码的有效语法等,并生成对象文件。这些对象文件包含源代码的程序集代码输出。

链接:
在此阶段,链接器将对象文件和库链接在一起以生成可执行文件。

当应用程序或项目使用静态库时,它包括头文件,通常称为库接口,其中包含应用程序使用的api和其他构造的列表。应用程序还需要链接到库文件。

显然,如果接口完好无损,即应用程序包含的库头文件没有变化,则不需要编译,只需要链接到更新的库即可。

然而,我不认为有一种方法可以通过eclipseIDE重新链接更新的库,所以你应该重建你的项目,这基本上可以完成必要的工作
即:
重新编译您的项目并将新库重新链接到该项目或
只需将新库重新链接到您的项目即可。