gisspirit 发表于 2009-12-28 09:44

多个.a文件怎么合并为一个.a或者.so

有没有办法将a.so和b.so合成为ab.so?

cjaizss 发表于 2009-12-28 10:08

怎么有这么奇怪的需求?

liying_gg 发表于 2009-12-28 10:27

回复 #1 gisspirit 的帖子

有没有办法将a.so和b.so合成为ab.so?
不行

gisspirit 发表于 2009-12-28 10:29

楼上的,为嘛不行啊?

gisspirit 发表于 2009-12-28 10:30

回复 #2 cjaizss 的帖子

我的代码中模块太多了,想把各个模块的so变成一个统一的so,省得麻烦

liying_gg 发表于 2009-12-28 11:30

回复 #4 gisspirit 的帖子

ld combines a number of object and archive files, relocates their data and ties up
       symbol references. Usually the last step in compiling a program is to run ld.

gisspirit 发表于 2009-12-28 11:53

回复 #6 liying_gg 的帖子

楼上的基础真扎实,佩服!
特地请教另外一个问题:
能不能把x.a和y.a编译成为xy.a?
我曾经试过:ar cqs xy.a x.a y.a
但是,在main.cpp链接xy.a的时候,提示xy.a里面没有index?

liying_gg 发表于 2009-12-28 15:19

回复 #7 gisspirit 的帖子

可以,不过得先解压出来.o
ls *.a|xargs -i ar -x -v {}|cut -d " " -f3|xargs -i ar -v -q newar.a {}

[ 本帖最后由 liying_gg 于 2009-12-28 15:30 编辑 ]

Henk2009 发表于 2009-12-28 18:24

学习!:mrgreen:

gisspirit 发表于 2009-12-28 22:45

回复 #8 liying_gg 的帖子

经过大家的帮助,我已经得到了结论:
我的疑问是:一个完整的应用,有几个模块(a,b……)组成,a被b调用,b被应用层(m)调用。
为了将各个模块统一为一个库文件,各个模块的编译有如下两个选择:
1)把各个模块编译为静态库(liba.a,libb.a……),然后把各个静态库解开为.o文件,再打包为统一的库文件libab.a;
2)把底层模块编译为静态库(liba.a……),把上层模块编译为动态库(libb.so……),同时链接底层库,最后得到统一的库文件libab.so;
页: [1] 2
查看完整版本: 多个.a文件怎么合并为一个.a或者.so