zoukankan      html  css  js  c++  java
  • 静态库递归引用产生的问题

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

    一、出问题的场景

    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的时候可以避免静态库递归的。不过最终还是没能成功。

  • 相关阅读:
    Vue 路由的编程式导航与history模式
    Vue 路由配置、动态路由
    Vue 组件传值
    Vue 组件以及生命周期函数
    Vue 封装js
    记一次proc_open没有开启心得感悟
    面向内容的标记语言--markdonw
    浅谈索引
    mysql主从配置
    centos7下操作防火墙
  • 原文地址:https://www.cnblogs.com/bugutian/p/6249596.html
Copyright © 2011-2022 走看看