- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
学云签约讲师魏娟学习c++开发基于Linux系统开发系列
—第31讲sharedobject
上节回顾manmakefile
什么是sharedobject为什么要有shareobject如何创建sharedobject如何使用sharedobject本节目标
sharedobject共享对象动态链接库系统提供有标准的动态链接库,包括命令、库函数、算法等,程序需要可在运行时加载提供一系列功能的函数实现可供其他需要的程序使用,也是一种文件什么是sharedobject
为什么要有sharedobject产生sharedobject的背景编译的静态链接任何一个c++源文件要经过编译和链接两个步骤才能生成可执行文件通过编译获得目标文件.o,文件中是一些可执行代码的片段,不能直接运行目标文件.o必须通过链接过程链接成一个完整的可执行文件我们把所有目标文件直接链接到可执行程序内部的链接方法,称作静态链接g++-oc.exea.ob.o;生成的可执行文件c.exe中包含了一份a.o,b.o的代码而a.o,b.o本身只是可执行代码片段,不能单独运行
为什么要有sharedobject若a.o,b.o的代码修改了,则要生成修改后的c.exe,必须又要重新编译g++-oc.exea.ob.o,才能生成新的c.exe文件。这种编译方式是静态链接。编译的动态链接一个id生成文件idgen.cc,编译成了idgen.o目标文件a.exe,b.exe文件都需要idgen.o文件来编译:g++-oa.exea.o,idgen.o;g++-ob.exeb.oidgen.ob.oa.oc.exeb.oa.o
为什么要有sharedobjecta.exe,b.exe中都有一份idgen.o的代码片段idgen.oa.exeidgen.oidgen.ob.exe如果idgen.o修改了,此时没有重新编译,则a.exe,b.exe中的idgen.o就不会变,运行a.exe,b.exe则也不会变只有重新编译才会是修改后的效果,这就是静态链接的缺点如果有很多的*.exe文件都需要用idgen.o编译,那么idgen.o修改了,若采用静态链接的话,则就要重新编译所有的*.exe文件,这样工作量非常大
为什么要有sharedobject如何解决?动态链接,让多个*.exe共用idgen.o编译时并不把idgen.o拷贝给a.exe,b.exe,而是让a.exe,b.exe指向idgen.o在程序运行时,再加载idgen.o一起运行,这就是动态链接,而idgen.o就是动态链接的文件当idgen.o修改了,不需要重新编译a.exe,b.exe,运行时加载idgen.o则他们的运行随之改变当一个.o文件需要被多个文件exe文件使用时,就可以将这个.o文件做成动态链接库指向idgen.oa.exeidgen.o指向idgen.ob.exe
如何创建sharedobject创建sharedobject在Linux(Unix)系统也允许程序员编写自定义动态链接库,动态链接库的命名规则是libXXX.soso是后缀,lib是前缀,XXX是这个动态链接库的名称,也叫做动态链接库的主名libpthread.so,pthread是这个库的主名,libpthread.so是这个库文件的文件名创建sharedobject的方法步骤编写只包含函、类,不包含main的源文件XXX.ccg++编译成XXX.o目标文件g++-c-oXXX.oXXX.cc
如何创建sharedobject将XXX.o目标文件转换为lib库名.so的动态链接库文件g++-shared-olib库名.soXXX.o将XXX.o目标文件转换为lib库名.so的动态链接库文件g++-shared-olib库名.soXXX.o将生成的动态链接库文件的路径设置给系统环境变量LD_LIBRARY_PATH,并且exportLD_LIBRARY_PATH
使用sharedobject使用sharedobject如果一个程序要使用某个动态链接库,则编译时要使用-l选项来指定要使用的库的主名g++-othread_test-lpthreadthread_test.ccLinux(Unix)系统中给我们提供了很多现有的动态链接库,放在/usr/lib目录中,可以查看和使用如果编译时给定了动态链接库选项,则系统会自动到该目录下找指定的动态链接库文件使用自定义的动态链接库,除了给出库名还需要指定库的位置路径,使用-L来指定g++-omy_test-lmylib-Llibmy_test.cc将库的路径设置给环境变量
您可能关注的文档
最近下载
- 人教版高中物理-有答案-人教版高中物理-选修3-1-18-电容器的电容-同步练习.docx VIP
- 胸心外科动脉导管未闭病案分析.docx VIP
- 2025年RCEP关税调整对国内制造业影响深度分析报告.docx VIP
- 上海PPAP培训课件.ppt VIP
- 2025华南地区经济情况特别报告.pdf VIP
- 第十二章 全等三角形知识归纳与题型突破(12类题型清单)(解析版).docx VIP
- Unit4 第2课时Speed up Fuel up(教学设计)-三年级英语下册(外研版三起2024).pdf VIP
- 北京德佛斯DFSFS3000变频器说明书.docx VIP
- 2024-2025学年人教版英语八年级上册阅读理解解题技巧讲义.docx VIP
- 带电粒子在电场中的运动.ppt VIP
文档评论(0)