免费注册 查看新帖 |

Chinaunix

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

[C] 请问高手:动态.so插件,如何引用框架里的静态对象?(问题解决了) [复制链接]

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-12 14:40 |只看该作者 |倒序浏览
本帖最后由 yulihua49 于 2015-05-14 11:32 编辑

一个应用服务器,由管理资源的框架和业务逻辑插件组成。
业务逻辑插件是若干 .so,在需要时,由框架加载进来。
这些.so,他们会引用一些框架里的资源管理函数,如获取、释放连接池什么的。
这些是静态库(.a)存在于框架的。.so里找不到它们,怎么办?

如果编译.so时,-l静态库 是可以使用库里的符号名。但是是在这个.so里复制了一套实例,根本不是框架里的那个实例。这样不行。
你自己的实例根本没有进行初始化,不能使用的。特别是线程锁什么的,根本锁的就不是一个东西。

框架里的公用符号是 -fPIC编译的,应该能找到他的浮动地址。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2015-05-12 14:57 |只看该作者
框架注入给so

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
3 [报告]
发表于 2015-05-12 14:59 |只看该作者
本帖最后由 yulihua49 于 2015-05-12 15:00 编辑
hellioncu 发表于 2015-05-12 14:57
框架注入给so

有些函数,有些数据,太多了。
我现在是注入,通过context带入,烦死了。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2015-05-12 15:09 |只看该作者
yulihua49 发表于 2015-05-12 14:59
有些函数,有些数据,太多了。
我现在是注入,通过context带入,烦死了。


这样迫使你把接口理清楚,如果性能要求不高,可以用字符串、整数常量作为key来获取,以简化接口。

两边link到一起,耦合严重,后续问题多多

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
5 [报告]
发表于 2015-05-12 15:13 |只看该作者
本帖最后由 yulihua49 于 2015-05-12 15:15 编辑
hellioncu 发表于 2015-05-12 15:09
这样迫使你把接口理清楚,如果性能要求不高,可以用字符串、整数常量作为key来获取,以简化接口。

两 ...


还一个办法,框架用动态库。这也很烦人。要link一大堆.so。
幸亏框架是自己写的。要是第三方没源码还没辙了。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
6 [报告]
发表于 2015-05-12 15:17 |只看该作者
yulihua49 发表于 2015-05-12 15:13
还一个办法,框架用动态库。这也很烦人。要link一大堆.so。
幸亏框架是自己写的。要是第三方没源码还没 ...


这样后续会比较麻烦,维护出问题的概率大,不是好的设计

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
7 [报告]
发表于 2015-05-12 15:21 |只看该作者
试试-rdynamic选项

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
8 [报告]
发表于 2015-05-12 15:24 |只看该作者
本帖最后由 yulihua49 于 2015-05-12 15:29 编辑
hellioncu 发表于 2015-05-12 15:17
这样后续会比较麻烦,维护出问题的概率大,不是好的设计


typedef struct myvar {
        char ShowID[100];
        char devid[21];
        char operid[17];
        char ca[256];
        INT64   logtime;
        CTX_stu ctx;
        int TCB_no;
        int poolno;
        T_Connect *conn;
        T_SQL_Connect *SQL_Connect;
        int (*ShowLog)(int level,const char *fmt,...);
        int (*get_DB)(T_SQL_Connect **SQL_Connect,int poolno,int flg);
        void (*release_DB)(T_SQL_Connect **SQL_Connect,int poolno);
} GDA;

context,后边一堆函数指针啊,快成对象了。
还有上百个数据库模板,还没弄呢。每个.so都加载一批模板?这个私用倒没什么关系。
先弄几个公用的。其他用私有实例吧。


论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
9 [报告]
发表于 2015-05-12 15:48 |只看该作者
yulihua49 发表于 2015-05-12 15:24
typedef struct myvar {
        char ShowID[100];
        char devid[21];


如果是c++,定义成抽象类比较好。

另外考虑下对齐,免得两边不一致

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
10 [报告]
发表于 2015-05-12 16:26 |只看该作者
hellioncu 发表于 2015-05-12 15:48
如果是c++,定义成抽象类比较好。

另外考虑下对齐,免得两边不一致


那个context要在应用模块中,一直向下传递,否则底层函数找不到框架。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP