2012-03-21 24 views
2

我有一个程序在编译时使用-L(mylib.a)(使用eclipse cdt)静态链接到Linux中的另一个库。C++ linux中的静态链接用法:每次更改库时是否需要重新编译所有内容?

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

回答

1

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

一个项目的建设可以打破在两个里程碑阶段:
编译:
在这个阶段的编译器编译每个翻译单位。它检查源代码的有效语法等并生成目标文件。这些目标文件包含源代码的汇编代码输出。

链接:
在该阶段期间,接头连接在一起的目标文件和库以产生一个可执行文件。

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

显然,如果接口是完整的,即应用程序包含的库头文件未更改,则不需要编译,但只需链接到更新的库。

但是,我不认为有一种方法可以通过eclipse IDE重新链接更新的库,因此您应该重新构建基本上可以满足需求的项目。
例如:
重新编译您的项目并将新库重新链接到它或
只需将新库重新链接到您的项目。

+0

链接不是编译的一部分,尽管它通常也是用编译器命令完成的。 – leftaroundabout 2012-03-21 09:46:55

+0

@leftaroundabout:我确定知道编译和链接是两个独立和不同的过程。当然,两者都可以单独从命令行完成,但我不认为它们可以在日食中单独完成,其中OP使用&因此是答案。 – 2012-03-21 09:48:38

+0

也许“重建”比“重新编译”更少争议。 – juanchopanza 2012-03-21 09:55:09

3

如果您没有更改库的接口(即标题),则只有重新链接就足够了。

+0

谢谢。你有任何想法如何执行只在eclipse中重新链接? – dan12345 2012-03-21 09:45:55

相关问题