你想要的是"部分链接".
您可以使用-r
来完成此操作,而不是初始命令中的-c
.
它产生一个可重定位的.o
作为输出,但(与-c
不同)does链接它可以解析的事物(即vendor.a
)
给定以下.c
个文件:
==> ifort.c <==
void wrapa(void);
int
main(void)
{
wrapa();
return 0;
}
==> venda.c <==
void
venda(void)
{
}
==> vendb.c <==
void
vendb(void)
{
}
==> wrapper.c <==
void venda(void);
void
wrapa(void)
{
venda();
}
void vendb(void);
void
wrapb(void)
{
vendb();
}
以下是构建命令文件:
gcc -c venda.c
gcc -c vendb.c
ar crv vend.a venda.o vendb.o
gcc -c wrapper.c
ld -r -o mylib.o wrapper.o -L. -l:vend.a
gcc -o ifort ifort.c mylib.o
nm -go *.o
以下是sh -x
个构建版本的输出:
+ gcc -c venda.c
+ gcc -c vendb.c
+ ar crv vend.a venda.o vendb.o
r - venda.o
r - vendb.o
+ gcc -c wrapper.c
+ ld -r -o mylib.o wrapper.o -L. -l:vend.a
+ gcc -o ifort ifort.c mylib.o
+ nm -go mylib.o venda.o vendb.o wrap.o wrapper.o
mylib.o:0000000000000018 T venda
mylib.o:000000000000001f T vendb
mylib.o:0000000000000000 T wrapa
mylib.o:000000000000000c T wrapb
venda.o:0000000000000000 T venda
vendb.o:0000000000000000 T vendb
wrap.o: U venda
wrap.o: U vendb
wrap.o:0000000000000000 T wrapa
wrap.o:000000000000000c T wrapb
wrapper.o: U venda
wrapper.o: U vendb
wrapper.o:0000000000000000 T wrapa
wrapper.o:000000000000000c T wrapb