zoukankan      html  css  js  c++  java
  • linux上静态库链接的有关问题

    求大神,linux下静态库链接的问题
    有两个文件和一个库,a.c, b.c,libh.a,其中b.c里面会有调用libh.a的函数func1,现在将a.c, b.c,libh.a编译链接生成可执行文件,有下面几种操作方式
    1、直接编译生成a.o, b.o,然后链接libh.a,没有问题,正常
    2、将b.c打包成库libb.a,然后编译生成a.o,然后链接libh.a,libb.a,则a.o,libb.a, libh,a能链接通过,没有问题,正常
    现在的问题是不链接libh.a,问题来了
    1、直接编译生成a.o, b.o,然后链接则会报错,说FUNC1找不到
    2、将b.c打包成库libb.a,然后编译生成a.o,然后链接libb.a,则有两种情况
    1)如果a.c中不调用b.c中的函数,则能链接通过并生成执行文件,
    2)如果a.c中有调用b.c中的函数FUNC2,同链接不能通过。
    不知道三种情况下,为什么a.c中调不调libb.a中的函数会有两种不同的表现?难道不调用libb.a中的函数的时候,libb.a就不会去链接libh.a吗?求解

    linux 链接 静态库


    ------解决方案--------------------
    静态库中没有内容被引用的 .o 文件是不会参与链接的。

    转自:http://www.myexception.cn/c/1170327.html

    =============== Elta的分割线 ================

    这个错误最近经常出现,而且让人一头雾水。找到的这个答案讲解的也很清楚了。

    其实就是:如果有两个链接库,一个用到了另外一个的函数,而链接用的.o文件却没有用到这个函数,那么这个函数是不会被链接通过的。

  • 相关阅读:
    1099. Build A Binary Search Tree (30)
    两个新事物
    time.h
    Nohup命令
    进程锁
    C++中虚析构函数的作用
    c++ 修改stl set中的元素
    STL迭代器辅助函数——advance
    CTreeCtrl 控件使用总结
    关于stl advance函数移动步数超过容器大小(越界)的研究
  • 原文地址:https://www.cnblogs.com/elta/p/3435536.html
Copyright © 2011-2022 走看看