链接、装载和库看完这个系列就够了(一)(静态库链接顺序问题)

初衷

工作中经常会碰到不同平台之间移植代码,项目中引入各种开源库,经常会碰到很多奇怪的编译、链接问题,这里做一下整理,尽量包含常见的大部分问题。首先我们来关注一下链接顺序引发的问题。

静态库链接顺序问题

测试代码

最常见的问题

正常情况下(每个静态库之间没有相互依赖关系),静态库之间链接顺序是不需要关注的,但是如果两个库之间存在相互的调用,就会出现链接问题,看一个例子(头文件只声明函数,不再贴出):

//lib_a1.c
#include "lib_a1.h"
int a1_fun()
{
        return 0;
}
//lib_a2.c
#include "lib_a2.h"
#include "lib_a1.h"
int a2_fun()
{
        a1_fun();
        return 0;
}
//main.c
#include "lib_a1.h"
#include "lib_a2.h"

int main()
{
        //a1_fun();
        a2_fun();
        return 0;
}
#Makefile
all:main
lib_a1.a: lib_a1.o
        ar rcs $@ $<
lib_a2.a: lib_a2.o
        ar rcs $@ $<

main: main.o lib_a1.a lib_a2.a
        gcc -o $@ main.o -l_a1 -l_a2 -L. 

clean:
        rm -rf *.o *.a *.so main

此时执行,会报未定义的问

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值