小编Tud*_*dor的帖子

静态库中的所有函数都链接到最终的可执行文件中吗?

我是静态库新手,只是想 100% 确定我正在做的事情是正确的。简而言之,我将尝试用这个简单的例子来解释我的问题:

如果mylib.a我定义了以下函数:

int f1 (int a, int b) {/*some code here...*/}
int f2 (int a, int b) {/*some code here...*/}
int f3 (int a, int b) {/*some code here...*/}
// we also suppose that f1 does not call f2 or f3.
Run Code Online (Sandbox Code Playgroud)

在我的项目中,我链接mylib.a但仅使用了f1. 也会f2进入f3最终的可执行文件吗?

我有一种感觉,这也是特定于编译器的,但我们考虑一下我们只在这里讨论GCC。我会找到有关其他编译器的任何具体信息,例如MSVC compiler它们如何处理这个问题,这些信息都很有价值,因为我想让我的库尽可能兼容。


我还发现维基百科上给出的解释含糊不清,因为我不清楚包括those parts of the library...。另外,该表达式it is enough to include并没有让我确信只包含所需的代码。

使用静态链接,包含目标可执行文件(或目标库)直接和间接引用的库部分就足够了。使用动态库时,会加载整个库,因为事先不知道应用程序将调用哪些函数。

c gcc static-libraries

4
推荐指数
1
解决办法
1995
查看次数

标签 统计

c ×1

gcc ×1

static-libraries ×1