Linux高级编程实验实验4报告(可直接使用).doc.docxVIP

Linux高级编程实验实验4报告(可直接使用).doc.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
.精品. .精品. .精品. .精品. 电孑斛 学生姓名:学号:实验地点:清水河主楼A2-412指导教师:李林实验时间: 学生姓名: 学号: 实验地点:清水河主楼A2-412 指导教师:李林 实验时间: 一、 实验室名称: Linux环境高级编程实验室 二、 实验项目名称: 插件框架实验 三、 实验学时: 4学时 四、 实验目的: 实践Linux环境下插件框架的开发。学习并掌握插件的工作原理。 五、 实验内容: 1、使用动态链接库实现打卬功能 开发一个程序,向屏幕打印Hello Worlds在不重新编译链接原程序 的前提下,将打印的文字改为“Hello China。 2、使用动态链接库实现自定义打卬功能 同时要打卬“Hello World,\打印“Hello China”,甚至同时打印未来 才会增加的其他打印信息。打印未来的这些信息,也不能重新编译链 接原程序。 3、一次只调用一种功能 通过命令行方式:./a.outhclp,输出所有插件实现的功能ID,以及该 功能ID对应的功能描述(参考代码3) 通过命令行方式:./a.out FuncID,调用具体打卬功能(每个插件导出 GetID接口)(参考代码4) 4、导出函数都放在一个类中 在版木3中,插件导出了 Print、GetID Help三个函数,主程序需要 使用多个容器分别保存这些函数地址。在复杂的业务逻辑中,导出的 函数可能更多,若还按照版本3的方式,代码维护性不佳。将三个导 出函数都放在一个类中,让插件外部获取该类的对象 版本1 程序代码如图1.1、图1.2、图1.3所示(程序是在Linux图形界面截 取的,木人的Ubuntu在字符界面无法显示中文注释): ?精品. ?精品. .精品. .精品. function.cpp X ^include iostream 2 ustng namespace std; 4 extern - C- void Print( )//extern C-防止g “编译器对函数名进行修改 6{ cout ? Hello baby!!” ? endl; 图1.1功能函数 helloworld.cpp X elude to£trean 2 using nanespace std; 4 extern HCF void world()//extern C防止g十十编译器对函数名进行修改 6{ 7 cout ? ?Hello world!M ? endl; 8} 9 图 1.2 hello world 函数 监 main.cpp X Mnclude dlfcn.h〃包含dlopen ()函数.*dlsym()函数,*dlerror()函数,于动态链接 库有短 ^Include tostrean 3 using namespace std; 5 tnt matn() 7{ void *handle = dlopen(11./function.so1, RTLD_LAZY);//打幵动态链接库?爹数 1 是 动态彼接库的文件名.参数二是动态链接库的使用方法。RTLD.LAZY:动态地加入动态链接库 中的函数。返回值:岀错返回NULL。 if(handle == 0) { cout ? ?dlopen error** ? endl; return 0; } 14 typedef void (*FUNC_PRINT)( );//走义一个函数指针(扌旨向函数的指针) *FUNC.PRINT它返回void类型.没有爹数。 FUNC_PRINT dl^print = (FUNC_PRINT)dlsym(handXe/ MPrinf );//dlsyn函数的功能 是咲射动态链接库中6勺函数,找到函薮地址,釜1是dlopen ()的返回值。参数2是动态链接库 中的函数名。dlsyn函数返回值:參数2所示函数被加载后,在进程地址空间中的地址,岀错则 返回NULL。 tf(dl_prtnt == 0) { cout ? dlsyn error11 ? endl; return 0; } 22 (dl_print)();//dlclose ()函数为卸载动态链接库°参数为dlopen的返回值。 24 dlclose(handle); 26 return 0; } 图1.3主函数 首先,使用命令#g++ -fpic -shared -o function.so helloworld.cpp function.cpp 将 helloworld.cpp 和 function.cpp 编写成动态库 function.S0o 如图1.4所示: rooty YanYull in:/hone/yanyum hvc-or-cpp/L inux-tra i 1 /4dong-ta i-kii/

文档评论(0)

dianxin1241 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档