GCC系列之 静态库(二)

上面讲述了静态库的加载是按需加载的方式进行的,本篇主要讲多个静态库加载的先后顺序和他们之间的依赖关系有关。

还是上面几个文件为例 c1.c为新加入的文件 main.c有所改动:

//c1.c
void f1_run1(void);

void c1_run1(void)
{
    f1_run1();
}

//main.c
//void f1_run1(void);
//void f1_run2(void);
//void f2_run1(void);
//void f2_run2(void);
void c1_run1(void);

int main(int argc, char **argv)
{
    c1_run1();
    return 0;
}

由上面可以 c1.c 依赖于f1.c

将c1.c编成静态库libmyc.a (由于和libc.so 标准库名字冲突 哈哈 故加了个my)



此时编译main.c 注意libmyc.a 依赖于libf.a

根据链接的规则依赖别人的放在别人的前面

所以myc 要在 f之前:



如果交换位置会报出未定义的引用的错误:


其实大家可以做个实验 即使这2个库正确 如果把main.c放到最后 即 gcc  -L.  -lmyc  -lf main.c 

main.c中调用的函数编译器也会报出类似的问题 

动态库和动态库之间不存在这个问题,后面将继续深入讲解 混合使用的时候的各种情况还有gcc一些参数 

如-Wl,--allow-shlib-undefined 等等


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值