免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 17469 | 回复: 16
打印 上一主题 下一主题

请问 linux下怎样把几个静态库(libabc.a...)编译成一个动态库(libtest.so) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-27 17:57 |只看该作者 |倒序浏览
请问 linux下怎样把几个静态库(libabc.a...)编译成一个动态库(libtest.so)
我用 gcc -shared -fPIC libabc.a libdef.a -o libtest.so  
生成的 libtest.so 只有空架子, 没内容,
静态库都是用 ar cru 一批 .o 文件产生的。
谢谢
sorry, 先前帖子写错了。这是Makefile
LIBDIR = ./lib
SRCDIR = ./src
VPATH  = $(SRCDIR)

PROJ  = iccp
OPT   =
DEFS  =
LIST  = >> cc.lst 2>&1

CC = gcc

LIBRARY = $(LIBDIR)/$(PROJ).so

OBJECTS = $(LIBDIR)/mem.a \
        $(LIBDIR)/slog.a        \
        $(LIBDIR)/util.a        \
        $(LIBDIR)/mlogl.a        \
        $(LIBDIR)/asn1l.a        \
        $(LIBDIR)/mmsl.a        \
        $(LIBDIR)/mmsle.a        \
        $(LIBDIR)/mvl.a        \
        $(LIBDIR)/mi.a        \
        $(LIBDIR)/ositcpe.a       

all: $(LIBRARY)

$(LIBRARY): $(OBJECTS)
        rm -f $(LIBRARY)
        $(CC) -shared -fPIC $(OBJECTS) -Wl,-soname -Wl,$@ -o $@ -lc $(LIST)
        @echo "FINISHED CREATING $(LIBRARY) LIBRARY" $(LIST)
        @echo "-----------------------------------------------------" $(LIST)


$(LIBDIR)/mem.a:
        $(MAKE) $(AM_MAKEFLAGS) -f mem.mk
$(LIBDIR)/slog.a:
        $(MAKE) $(AM_MAKEFLAGS) -f slog.mk
$(LIBDIR)/util.a:
        $(MAKE) $(AM_MAKEFLAGS) -f util.mk
$(LIBDIR)/mlogl.a:
        $(MAKE) $(AM_MAKEFLAGS) -f mlogl.mk
$(LIBDIR)/asn1l.a:
        $(MAKE) $(AM_MAKEFLAGS) -f asn1l.mk
$(LIBDIR)/mmsl.a:
        $(MAKE) $(AM_MAKEFLAGS) -f mmsl.mk
$(LIBDIR)/mmsle.a:
        $(MAKE) $(AM_MAKEFLAGS) -f mmsle.mk
$(LIBDIR)/mvl.a:
        $(MAKE) $(AM_MAKEFLAGS) -f mvl.mk
$(LIBDIR)/mi.a:
        $(MAKE) $(AM_MAKEFLAGS) -f mi.mk
$(LIBDIR)/ositcpe.a:
        $(MAKE) $(AM_MAKEFLAGS) -f ositcpe.mk




ls -l lib 显示 :
total 1456
-rw-r--r-- 1 root root  43078 2008-11-27 17:36 asn1l.a
-rwxrwxr-x 1 root root   3928 2008-11-27 17:36 iccp.so
-rw-r--r-- 1 root root   4748 2008-11-27 17:31 mem.a
-rw-r--r-- 1 root root 211968 2008-11-27 17:36 mi.a
-rw-r--r-- 1 root root 137024 2008-11-27 17:36 mlogl.a
-rw-r--r-- 1 root root 314742 2008-11-27 17:36 mmsl.a
-rw-r--r-- 1 root root 310012 2008-11-27 17:36 mmsle.a
-rw-r--r-- 1 root root 144370 2008-11-27 17:36 mvl.a
-rw-r--r-- 1 root root 147536 2008-11-27 17:36 ositcpe.a
-rw-r--r-- 1 root root  26370 2008-11-27 17:35 slog.a
-rw-r--r-- 1 root root  94846 2008-11-27 17:36 util.a


还有, 编译库,makefile 中是不是需要显式的加前缀 lib ?
谢谢

[ 本帖最后由 connet 于 2008-11-27 21:26 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-11-27 19:34 |只看该作者
-static 参数错误


清你查一下英语辞典 static 什么意思

然后查一下so文件叫什么

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
3 [报告]
发表于 2008-11-27 20:04 |只看该作者
原帖由 net_robber 于 2008-11-27 19:34 发表
-static 参数错误


清你查一下英语辞典 static 什么意思

然后查一下so文件叫什么

论坛徽章:
20
CU大牛徽章
日期:2013-04-17 11:48:26羊年新春福章
日期:2015-03-10 22:39:202015年中国系统架构师大会
日期:2015-06-29 16:11:282015亚冠之平阳省
日期:2015-07-31 09:19:042015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-09-30 06:20:002015亚冠之柏太阳神
日期:2015-10-19 20:29:5915-16赛季CBA联赛之天津
日期:2016-11-29 14:03:4315-16赛季CBA联赛之北控
日期:2016-12-24 20:51:492015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-12 20:58:532014年中国系统架构师大会
日期:2014-10-14 15:59:00
4 [报告]
发表于 2008-11-27 23:08 |只看该作者
学习了

论坛徽章:
0
5 [报告]
发表于 2008-11-28 17:23 |只看该作者
都不愿意回答啊?
我自己观察别的lib 的编译流程, 找到了解决办法:
$(CC) -shared -fPIC $(OBJECTS) -Wl,-soname -Wl,$@ -o $@
改成:
$(CC) -shared -fPIC -Wl,--whole-archive   $(OBJECTS) -Wl,--no-whole-archive  -Wl,-soname -Wl,$@ -o $@
即可
网上有人说必须把 .a 解开 再 重新连接。其实不需要。

[ 本帖最后由 connet 于 2008-11-28 17:25 编辑 ]

评分

参与人数 1可用积分 +4 收起 理由
JohnBull + 4 我很赞同

查看全部评分

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2008-11-28 17:27 |只看该作者
原帖由 connet 于 2008-11-28 17:23 发表
都不愿意回答啊?
我自己观察别的lib 的编译流程, 找到了解决办法:
$(CC) -shared -fPIC $(OBJECTS) -Wl,-soname -Wl,$@ -o $@
改成:
$(CC) -shared -fPIC -Wl,--whole-archive   $(OBJECTS) -Wl,--no-w ...

sweet

论坛徽章:
0
7 [报告]
发表于 2008-11-28 17:32 |只看该作者
原帖由 connet 于 2008-11-28 17:23 发表
都不愿意回答啊?
我自己观察别的lib 的编译流程, 找到了解决办法:
$(CC) -shared -fPIC $(OBJECTS) -Wl,-soname -Wl,$@ -o $@
改成:
$(CC) -shared -fPIC -Wl,--whole-archive   $(OBJECTS) -Wl,--no-w ...

表扬一下。。。
把答案公布出来,精神可嘉

论坛徽章:
0
8 [报告]
发表于 2008-11-28 17:33 |只看该作者
好办法

论坛徽章:
0
9 [报告]
发表于 2008-11-28 17:39 |只看该作者
崇拜一个
第一次听说可以这样

论坛徽章:
0
10 [报告]
发表于 2008-11-28 19:23 |只看该作者

回复 #5 connet 的帖子

从某种程度上,*.a 文件就是 *.o 文件。

编译动态库加上  -shared 选项是常识,之前你没加。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP