【发布时间】:2010-12-23 14:26:47
【问题描述】:
考虑这段代码:
one.c:
#include <stdio.h>
int one() {
printf("one!\n");
return 1;
}
两个.c:
#include <stdio.h>
int two() {
printf("two!\n");
return 2;
}
prog.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”文件?它们似乎都是静态链接的,那么它们之间是否存在优势或架构差异?
【问题讨论】:
标签: c linux gcc static-linking