• 静态库递归引用产生的问题


    由于静态库可以避免程序运行时去找动态库,所以编译的时候经常使用。

    一、出问题的场景

    a编译成静态库lib.a,b引用lib.a编译成静态库libb.a
    这时项目c要使用b,但是直接引用libb.a和b的头文件并不能成功。
    c需要同时引用a、b并且在Makefile中a必须写在b的后面。

    二、具体描述说明

    使用redis做二次开发。
    首先将redis-3.2.6打包成静态库redis.a,
    编写了一套C++的接口slibredis封装redis.a,把slibredis也打包成静态库slibredis.a,
    用封装的slibredis.a写项目。

    (1)本以为只需要引用自己封装的静态库即可,也就是slibredis.a和其对应的头文件;
        没想到会出错。各种"not found"

    (2)没办法,只能引用redis-3.2.6的头文件;
        结果还是不行,各种"undefined reference to `_XXXXXXXX()`"

    (3)没办法,只能把redis.a也引用进来。
        结果还是不行,各种"undefined reference to `_XXXXXXXX()`"

    (4)后来查了资料,原来这种情况对Makefile也有要求,
        也就是在Makefile中,需要把最先引用的静态库写在后引用静态库的后面,
     也就是Makefile中需要这样写:g++ (省略n个字) /path/to/slibredis.a /path/to/redis.a
     终于成功了。

    三、其他解决方案

        当然网上也说了各种添加参数,可以在封装slibredis的时候可以避免静态库递归的。不过最终还是没能成功。

  • 相关阅读:
    【Linux】【Services】【SaaS】Docker+kubernetes(11. 构建复杂的高可用网络)
    【Linux】【Services】【SaaS】Docker+kubernetes(10. 利用反向代理实现服务高可用)
    socketserver.py
    Python 字符中文坑
    H3C对接华为S5700s---配置链路聚合
    format使用
    python 登入接口
    python 多级菜单
    Windows 下安装MongoDB
    Gerrit 服务器安装插件
  • 原文地址:https://www.cnblogs.com/bugutian/p/6249596.html
Copyright © 2020-2023  润新知