当前位置:  技术问答>linux和unix

关于程序实现问题,比较有难度,见内.

    来源: 互联网  发布时间:2016-01-05

    本文导语:  现在我们比方有A,B,C,D四个地方的项目,而对于我们的源代码来说都是一套,只是在某些地方各地有各地的差异,现在比如这四个地方都要校验用户状态(这个里面可能有很多逻辑),现在我们能不能做成A.so,B.so,C.so,D.so,每个so...

现在我们比方有A,B,C,D四个地方的项目,而对于我们的源代码来说都是一套,只是在某些地方各地有各地的差异,现在比如这四个地方都要校验用户状态(这个里面可能有很多逻辑),现在我们能不能做成A.so,B.so,C.so,D.so,每个so也对应于一个目录,版本发布时,比如发布到A地方去,我只取A目录,别的目录都不取.
我的应用程序是  建立在.so 之上的,动态加载.

现在我有个想法(比如校验用户状态):
目录 ABCD的父类: CheckUserStateBase 这是基类,定义流程中调用的虚方法
同级的目录是:    ACheckUserStateBase A项目目录 :public CheckUserStateBase
同级的目录是:    BCheckUserStateBase:public CheckUserStateBase
同级的目录是:    CCheckUserStateBase:public CheckUserStateBase
同级的目录是:    DCheckUserStateBase:public CheckUserStateBase
每个项目的目录是将 基类中的方法实现.
然后再建立四个同级的目录中,分别都写一个对外接口,方法名与参数都一样.
然后我编译时 我将 [-]BCheckUserStateBase(只允许一个目录存在) 编译成 UserStateBase.so(这个时间我把CheckUserStateBase.so 链进去 ), 我在应用程序中我open时,会去open 动态库 CheckUserStateBase.so  中的 XXX 方法,这样 我保证了基类接口不变,各地项目实现后开放接口,对于应用程序来说调用的都是同一个库里的同一个方法,当然同一个库,是我们做了手脚的,这样对于实施时,是不是可以做到与别的项目的代码的无关性?

是不是还有更好的方法,请告诉我,谢谢~~~






|
你可以编译成A.so/B.so/C.so/D.so
但是发布的时候只发布任意一个.so,注意不要发多了
然后在主程序中调用dlopen去试着一个一个调啊,
代码大体上类似如下
void* OpenCheckSO( void )
{
    void* lib;//实际情况要考虑.so的路径
    lib = dlopen( "A.so", RTLD_NOW );
    if ( lib != NULL )  return lib;
    lib = dlopen( "B.so", RTLD_NOW );
    if ( lib != NULL )  return lib;
    lib = dlopen( "C.so", RTLD_NOW );
    if ( lib != NULL )  return lib;
    lib = dlopen( "D.so", RTLD_NOW );
    if ( lib != NULL )  return lib;
    return NULL;
}

打开了动态库后,再用dlsym( lib, "CheckUserState" );就可以得到函数的地址了
然后就可以调用你的check函数

也就是你发布的时候想发布哪个so就发布哪个,不要发错了就行

|
这是一个动态调用的问题.
你说的大体方向没有错.

你可以参考一下那些开源软件里面附带plugin的项目的实现方式.比如eclipse等

    
 
 

您可能感兴趣的文章:

  • shell程序调用问题(一点点难度)
  • 急,高难度问题,win2000登录UNIX,运行上面的程序的问题。高手请进!给高分!
  • c语言判断某一年是否为闰年的各种实现程序代码
  • 编一个模拟shell实现的程序,怎么实现输入输出重定向?谢谢
  • linux下通过crond实现自动执行程序
  • 如何用shell程序实现一个监控程序(内详)
  • HASH查找的程序实现及性能分析
  • applet程序不能实现与application程序之间的通信,怎么办呢?
  • 使用libpcap实现抓包程序的步骤及代码示例
  • 请问能否在linux实现一个应用程序访问另外一个程序的内存数据?
  • c语言基于libpcap实现一个抓包程序过程
  • 实现同样的功能,内核程序和用户程序差别效率上差别大么?
  • 用户程序的ioctl是怎么和驱动程序中的ioctl实现联系
  • 关于linux c程序实现自动实现telnet的问题
  • 问下arm下如何实现memory模式的cf的驱动,程序框架怎么搭!有源程序参考下更好!分数不多全部送上,谢谢了!
  • 在linux实现在任意给定的目录查找文需要的件的程序? 下面的实现思路可不可以呢????
  • linux下,如何在程序中分区(代码实现)
  • 请问Jb怎么实现系统登录程序!
  • 求救呀:我用QT编了一个界面程序,怎么实现静态编译好让那个程序也能在没有装QT的系统上运行呀!!!
  • expect实现telnet远程主机后,运行程序问题
  • 客户端程序和服务器程序间能否通过管道来实现数据的双向传递啊?
  • 请问两个毫不相关的程序,怎样实现通信
  • 如何用bash实现这个程序?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 编写连接数多的服务器程序用什么程序结构比较好呢?
  • 实现一个简单的目录比较程序
  • shell程序里如何比较日期大小
  • 请问wxWindows 和Qt随用来移植MFC开发的程序比较好?
  • 请问调试程序用什么工具比较好?
  • linux程序开发,哪些书比较好
  • 请教在linux下用什么编写web程序比较方便?
  • NOSQL iis7站长之家
  • 哪个程序来引导各个操作系统比较好?
  • jsp程序员是否有前途,如果没有,往那方面发展比较好!
  • unix下有没有比较好的程序版本控制和文档管理的工具?
  • 在Linux下用什么平台开发java程序比较好?
  • 板卡程序自启动和在用户模式下启动反差比较大
  • 各位请问如何linux下安装程序,和windows 比较什么区别,最好给个例子
  • 请问Linux下开发C程序,用什么软件比较好?
  • 请问那里有比较多的java程序原码下载
  • Linux下的调试程序哪个比较好?GDB怎么样?
  • 请问哪儿有比较好的基于java的网站流量统计程序下载?(内容空)
  • linux下有哪些比较好用的汇编程序
  • 在linux下做C程序,用哪个版本的LINUX比较好?
  • 重装服务器后IIS网站错误(应用程序中的服务器错误)
  • 为什么我在java程序里启动的一个程序在java程序关闭后,该程序的所有进程都关掉了
  • windows server2008上PowerBuilder程序系统错误解决方法
  • Linux 编程怎么样在程序开启一个程序,和关闭一个程序?
  • 程序员的八种级别,你属于哪一级?
  • 请问从一个java程序中如何调用另一java程序,并控制可以其状态(最小化、最大化、结束程序),还有怎样知道那个被调用的程序结束。
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • Linux下的程序是在内存中运行的吗?为什么在程序运行的时候可以删除程序文件?
  • 在docker容器中通过apt-get安装新的程序
  • 我的程序是用c写的gtk+程序,有个函数的参数要传给它图片的文件名,但是图片和原程序不在同一目录下怎么办?怎么在程序里指定文件的路径
  • http协议介绍,文件上传分析及程序举例


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3