Linux高级编程实验实验4报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子科技大学

实验报告

学生:学号:指导教师:林

实验地点:清水河主楼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

程序代码如下:

图3.1 main.cpp

图3.2 function1.cpp

图3.3 function.cpp

此外,还有CPluginController.cpp和CPluginEnumerator.cpp,里面存放的都是main函数调用的子函数,在main里有注释,所以便不再赘述。

运行结果如下:

图3.4 运行过程与结果版本4

主要程序代码如下:

图4.1 main.cpp

图4.2 IPrintPlugin.cpp

图4.3 function1.cpp

图4.4 function.cpp

这种方式采用将三个导出函数都放在一个类中,让插件外部获取该类的对象。编译运行结果如下:

. .

.. .. 图4.5过程及结果

七、总结及心得体会:

本次实验主要是学习插件的开发和使用,通过不同的思想对不同插件进行编程,打开了我的思维,增加了我对插件编程的灵活性的掌控。

八、对本实验过程及方法、手段的改进建议:

这次做实验的过程有点紧凑,实验代码有的部分不是很理解(相关知识掌握不清晰),建议老师能在上堂课结束后提示一下本堂课的主要容,便于我们课后查阅提前准备。总的来说,收获很大。

报告评分:

指导教师签字:

相关文档
最新文档