Chinaunix

标题: linux链接库让人抓狂,求解 [打印本页]

作者: ricowarner    时间: 2014-05-30 15:16
标题: linux链接库让人抓狂,求解
一个调用者,要链接1.a,用里边的函数func1,然后func1需要用到另一个库2.a的func2.
然后调用者编译的时候是不是要指定-l,把1.a,2.a都包含进来?
擦,这简直是反人类,调用者凭什么要显式链接1.a用到的所有库,就不能生成1.a的时候把2.a包进1.a?


作者: ricowarner    时间: 2014-05-30 16:20
是不是可以这么理解,静态库根本不能叫可执行的库,只是源文件半成品打包了
作者: windoze    时间: 2014-06-02 23:19
你可以用ar把1.a和2.a打包到一起就没这个问题了。
作者: weishuo1999    时间: 2014-06-03 12:01
分开有分开的好处,合并有合并的好处。记得google内部的编译是直接编译成静态的大binary的可执行文件,不使用动态库依赖。也蛮好的,前提是发布的时候内部网络带宽足够。
作者: mymtom_cu    时间: 2014-06-03 12:11
静态库都需要这么链接啊!
作者: ricowarner    时间: 2014-06-04 14:31
windoze 发表于 2014-06-02 23:19
你可以用ar把1.a和2.a打包到一起就没这个问题了。


ar也试过,需要把所有.a 解成.o吧,而且不能用*,要是要几十个文件就抓瞎了,而且里边.o有同名的怎么办
作者: windoze    时间: 2014-06-04 15:50
回复 6# ricowarner

ar在创建库的时候,可以有重名的.o文件,如果你嫌麻烦,我刚花了几分钟写了一个垃圾脚本,你可以试试

  1. for f in `ls *.a`
  2. do
  3.         dir=`basename -s .a "$f"`
  4.         mkdir "$dir"
  5.         cd "$dir"
  6.         ar x "../$f"
  7.         cd ..
  8. done
  9. find . -name '*.o' | xargs ar rcs lib_what_you_want.a
复制代码

作者: ricowarner    时间: 2014-06-19 22:34
windoze 发表于 2014-06-04 15:50
回复 6# ricowarner

ar在创建库的时候,可以有重名的.o文件,如果你嫌麻烦,我刚花了几分钟写了一个垃圾 ...


3x,能用




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2