当前位置 博文首页 > 让代码改变世界:C/C++中多个库相互包含时,链接器的处理规则

    让代码改变世界:C/C++中多个库相互包含时,链接器的处理规则

    作者:[db:作者] 时间:2021-06-24 21:14

    C/C++中多个库相互包含时,链接器的处理规则

    以下结果都是在gcc(4.8.5)下测试的,其他平台及版本不确定是否一致。

    1. 在链接的时候,如果两个库中直接定义了同名接口,链接两个库是会报重复定义错误的。(无论接口实现是否相同)

    2. 但是,如果两个库中的同名接口来自另外一个库,即,如果AB.a AC.a 都链接了A.a ?那AB.a 和AC.a 还可以链接进同一个可执行文件或者库,这个时候

    ? ?2.1 如果两个A.a一样,则链接正常进行。

    ? ?2.2 如果两个A.a不一样但相互包含,比如AB 在AC前。

    ? ???? ?2.2.1 如果这个时候AB中的A包含AC中的A(即AC中有的AB中都有),那链接正常进行。

    ? ???? ?2.2.2 如果这个时候AC中的A包含AC中的A(即AB中有的AC中都有),那会链接失败。(把链接顺序倒一下就可以了,把AC放到AB前,即让全的放到前面)

    ? ?2.3 如果两个A.a不互相包含,则怎么放都会报错。