gpt4 book ai didi

c - 为什么要从 .o 创建一个 .a 文件用于静态链接?

转载 作者:IT王子 更新时间:2023-10-29 00:17:13 27 4
gpt4 key购买 nike

考虑这段代码:

一个.c:

#include <stdio.h>

int one() {
printf("one!\n");
return 1;
}

二.c:

#include <stdio.h>

int two() {
printf("two!\n");
return 2;
}

程序.c

#include <stdio.h>

int one();
int two();

int main(int argc, char *argv[])
{
one();
two();

return 0;
}

我想将这些程序链接在一起。所以我这样做:

gcc -c -o one.o one.c
gcc -c -o two.o two.c
gcc -o a.out prog.c one.o two.o

这很好用。

或者我可以创建一个静态库:

ar rcs libone.a one.o
ar rcs libtwo.a two.o
gcc prog.c libone.a libtwo.a
gcc -L. prog.c -lone -ltwo

所以我的问题是:为什么我要使用第二个版本——我创建“.a”文件的版本——而不是链接我的“.o”文件?它们似乎都是静态链接,那么两者之间是否存在优势或架构差异?

最佳答案

通常,库是可以在多个程序中使用的目标文件的集合。

在你的例子中没有优势,但你可能已经做到了:

ar rcs liboneandtwo.a one.o two.o

然后链接您的程序变得更简单:

gcc -L. prog.c -loneandtwo

这真的是一个包装问题。您是否有一组目标文件,这些目标文件自然地形成了一组可以在多个程序中重复使用的相关功能?如果是这样,那么可以明智地将它们归档到静态库中,否则可能没有任何优势。

最后的链接步骤有一个重要的区别。您链接的任何目标文件都将包含在最终程序中。库中的目标文件仅在它们有助于解析其他目标文件中的任何 undefined symbol 时才包含在内。如果不这样做,它们将不会链接到最终的可执行文件中。

关于c - 为什么要从 .o 创建一个 .a 文件用于静态链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1852941/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com