电 子 科 技 大 学实 验 报 告学生姓名: 学 号: 指导老师:李林实验地点:清水河主楼 A2—412 实验时间: 一、实验室名称:Linux 环境高级编程实验室二、实验项目名称:插件框架实验三、实验学时:4 学时四、实验目的:实践 Linux 环境下插件框架的开发.学习并掌握插件的工作原理.五、实验内容: 1、使用动态链接库实现打印功能开发一个程序,向屏幕打印“Hello World";在不重新编译链接原程序的前提下,将打印的文字改为“Hello China” 。 2、使用动态链接库实现自定义打印功能同时要打印“Hello World",打印“Hello China”,甚至同时打印未来才会增加的其他打印信息。打印未来的这些信息,也不能重新编译链接原程序。 3、一次只调用一种功能通过命令行方式:。/a.out help,输出所有插件实现的功能 ID,以及该功能 ID 对应的功能描述(参考代码 3)通过命令行方式:。/a。out FuncID,调用具体打印功能(每个插件导出 GetID 接口)(参考代码 4) 4、导出函数都放在一个类中在版本 3 中,插件导出了 Print、GetID、Help 三个函数,主程序需要使用多个容器分别保存这些函数地址。在复杂的业务逻辑中,导出的函数可能更多,若还根据版本 3 的方式,代码维护性不佳.将三个导出函数都放在一个类中,让插件外部猎取该类的对象六、实验步骤:版本 1程序代码如图 1.1、图 1。2、图 1.3 所示(程序是在 Linux 图形界面截取的,本人的 Ubuntu 在字符界面无法显示中文注释):图 1.1 功能函数图 1.2 hello world 函数图 1.3 主函数首先,使用命令#g++ —fpic –shared –o function.so helloworld。cpp function 。 cpp 将 helloworld 。 cpp 和 function.cpp 编 写 成 动 态 库function.so。如图 1。4 所示:图 1.4 动态链接库的编写然后,再进行动态库使用者的编译,命令是#g++ —o main main.cpp –ldl,如图 1.5 所示.图 1.5 动态库使用者图中显示了两次运行结果,但是第一次是 hello world,第二次是 hello baby。这很好地体现的动态链接的特性。版本 2代码如下:图 2.1 main 图 2.2 hello yanyumin 函数图 2.3 hello YANYUMIN 函数该 函 数 实 现 了 , 同 时 要 打 印 “ Hello yanyumin", 打 印 “ Hello YANYUMIN”,没有重新编译链接原程序.运行结果如下图 2。4 所示.图 2。4 运行结果版本 3—2程序代码...