当前位置: 首页 > news >正文 展示型网站建设方案外贸服装接单网站 news 2025/11/4 4:29:51 展示型网站建设方案,外贸服装接单网站,深圳 网站建设培训学校,望野怎么读静态链接库与动态链接库 一、从源程序到可执行文件二、编译、链接和装入三、静态链接库与动态链接库四、静态链接库与动态链接库的制作与使用1.静态库的制作及使用2.动态库的制作及使用 一、从源程序到可执行文件 由于计算机无法直接理解和执行高级语言#xff08;C、C、Java… 静态链接库与动态链接库 一、从源程序到可执行文件二、编译、链接和装入三、静态链接库与动态链接库四、静态链接库与动态链接库的制作与使用1.静态库的制作及使用2.动态库的制作及使用 一、从源程序到可执行文件 由于计算机无法直接理解和执行高级语言C、C、Java程序需要将高级语言程序转换为机器语言程序机器语言是用二进制代码表示的、计算机唯一可以直接识别和执行的一种机器指令的集合通常把这种转换过程叫做翻译。 在C/C中整个翻译过程可以分为四步 预处理阶段预处理器对源程序进行 #include 头文件展开、#define 宏替换、#ifdef 条件编译以及行号和文件标识的添加等预处理操作输出结果是一个以.i为扩展名的源文件。通过 g -E main.cpp main.i 命令可以生成预处理信息并将预处理信息重定向到指定文件中。编译阶段编译器对预处理后的源程序进行词法分析、句法分析等编译操作生成一个以.s为扩展名汇编语言源程序。汇编语言源程序中的每条语句都以一种文本格式描述了一条低级机器语言指令。通过 g -S main.cpp -o main.s 命令即可可以编译生成汇编文件。汇编阶段汇编器将汇编语言源程序翻译成机器语言指令并把这些指令打包成一个以.o为扩展名的可重定位目标文件它是一种二进制文件因此用文本编辑器打开会显示乱码。通过 g -c main.cpp -o main.o 命令即可汇编生成可重定位目标文件。链接阶段链接器将多个可重定位目标文件和链接库合并为一个可执行目标文件或简称可执行文件最终生成的可执行文件被保存在磁盘上。通过 g main.cpp -o main 命令即可实现从源程序到可执行文件的翻译过程。 二、编译、链接和装入 从操作系统程序执行的角度来看一个程序想要放在内存中执行除了上面的翻译过程预处理、编译、汇编、链接还需要对程序进行装入操作。 具体来说编译是由编译程序对用户源程序进行编译形成若干目标模块的过程这些目标模块中的地址均为伪逻辑地址即 0-10、0-10、0-10。链接则是由链接程序将一组目标模块及所需库函数进行链接形成一个完整的装入模块的过程这个装入模块中的地址为逻辑地址即 0 - 32。而装入则是由装入程序将装入模块装入内存装入后形成的是物理地址即 1000-1032。 链接方式主要分为以下三种 静态链接装入前链接成一个完整的装入模块以后不再拆开。装入时动态链接运行前装入内存时边装入边链接便于对目标模块的修改、更新与共享。运行时动态链接运行时需要目标模块才装入并连接加快了程序装入节省了内存空间。 装入方式也有三种 绝对装入在单道程序环境下编译时直接生成物理地址目标代码直接按此地址装入。仅适用于单道程序且要求程序员对内存极为熟悉但实际上编程一般使用符号地址。可重定位装入通过静态重定位在装入时将地址变换一次性完成一次性装入。装入时必须分配固定大小全部空间内存不足无法装入不支持程序浮动。动态运行时装入装入时不进行地址变换直到运行时再借助重定位寄存器进行动态重定位。装入部分代码即可运行可以分散存储支持程序浮动便于共享。 三、静态链接库与动态链接库 装入时动态链接还是运行时动态链接都属于动态链接都是将部分链接操作推迟到程序执行时才进行而动态链接一般需要使用动态链接库。而静态链接则是在生成可执行文件之前完成所有链接操作使用的库文件被称作静态链接库。 静态函数库一般命名为 libxxx.a 或 xxx.lib。静态函数库在编译的时候会直接整合到目标程序中所以利用静态函数库编译成的文件会比较大这类函数库最大的优点就是编译成功的可执行文件可以独立运行而不再需要向外部要求读取函数库的内容但升级时如果函数库更新则需要重新编译。 动态函数库一般命名为 libxxx.so 或 xxx.dll。与静态函数库被整个编译到程序中不同动态函数库只有当可执行文件需要使用到函数库的机制时程序才会去读取函数库来使用也就是说可执行文件无法单独运行这样方便升级只要替换对应动态库即可不必重新编译整个可执行文件。 静态库和动态库最本质的区别就是加载的时机静态库在编译阶段就会加载到可执行文件中而动态库会在执行阶段加载到可执行文件中。 四、静态链接库与动态链接库的制作与使用 1.静态库的制作及使用 静态库的制作命令为 g -c xxx.cpp -o xxx.o # 将目标源文件xxx.c编译成目标文件xxx.o ar -rcs libxxx.a xxx.o # 使用ar工具制作静态库libxxx.alib_fun.h void func(int num);lib_fun.cpp #include lib_fun.hvoid func(int num) {num; }main.cpp #include iostream #include lib_fun.husing namespace std;int main() {int x 0;func(x);cout x endl;return 0; }首先我们使用 tree 命令查看一下当前目录结构其中user目录模拟用户lib目录模拟库。 atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo$ tree . ├── lib │ ├── lib_fun.cpp │ └── lib_fun.h └── user├── lib_fun.h└── main.cpp2 directories, 4 files atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo$ 我们在user目录下先编译一下main.cpp看一下效果可以看到 func(int) 声明了但没有定义因为如果没有找到声明会直接报 was not declared in this scope。 atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo$ cd user/ atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/user$ g main.cpp -o main /usr/bin/ld: /tmp/ccnh1mTY.o: in function main: main.cpp:(.text0x2a): undefined reference to func(int) collect2: error: ld returned 1 exit status atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/user$ 然后我们回到lib目录制作静态库静态库的命名格式为 libxxx.a并将制作好的静态库拷贝到user目录下cd。 atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/user$ cd ../lib/ atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/lib$ g -c lib_fun.cpp -o lib_fun.o atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/lib$ ar -rcs libfun.a lib_fun.o atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/lib$ cp libfun.a ../user/ atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/lib$ tree ../ ../ ├── lib │ ├── libfun.a │ ├── lib_fun.cpp │ ├── lib_fun.h │ └── lib_fun.o └── user├── libfun.a├── lib_fun.h└── main.cpp2 directories, 7 files atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/lib$ 我们转到user目录下重新进行编译编译命令中的 -l 后面跟的是动态库的名字即 libxxx.a 中的 xxx -L 后面跟的是静态链接库 libxxx.a 的存放位置这里就在当前文件夹。可以看到在链接了静态库之后就可以正常执行了。 atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/user$ g main.cpp -l fun -L ./ -o main atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/user$ ./main 1 atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/user$ 2.动态库的制作及使用 动态库的制作命令为 g -shared -fPIC -o libxxx.so xxx.cpp # 制作动态库libxxx.so首先我们依然是使用 tree 命令查看一下当前目录结构。 atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo$ tree . ├── lib │ ├── lib_fun.cpp │ └── lib_fun.h └── user├── lib_fun.h└── main.cpp2 directories, 4 files atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo$ 同样的在lib目录下制作动态库并将其拷贝到user目录下。 atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/lib$ g -shared -fPIC -o libfun.so lib_fun.cpp atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/lib$ cp libfun.so ../user/ atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/lib$ 我们转到user目录下重新进行编译编译命令中的 ./libfun.so 即为动态库的存放路径。可以看到在链接了动态库之后就可以正常执行了。 atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/lib$ cd ../user/ atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/user$ g main.cpp ./libfun.so -o main atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/user$ ./main 1 atreusiZwz9fsfltolu74amg1v0rZ:~/Code/lib_demo/user$ 文章转载自: http://www.morning.pyswr.cn.gov.cn.pyswr.cn http://www.morning.sskns.cn.gov.cn.sskns.cn http://www.morning.mwqbp.cn.gov.cn.mwqbp.cn http://www.morning.sogou66.cn.gov.cn.sogou66.cn http://www.morning.grnhb.cn.gov.cn.grnhb.cn http://www.morning.ghslr.cn.gov.cn.ghslr.cn http://www.morning.jwgnn.cn.gov.cn.jwgnn.cn http://www.morning.bxqtq.cn.gov.cn.bxqtq.cn http://www.morning.kcypc.cn.gov.cn.kcypc.cn http://www.morning.fhyhr.cn.gov.cn.fhyhr.cn http://www.morning.kkjhj.cn.gov.cn.kkjhj.cn http://www.morning.gtqx.cn.gov.cn.gtqx.cn http://www.morning.jwsrp.cn.gov.cn.jwsrp.cn http://www.morning.mghgl.cn.gov.cn.mghgl.cn http://www.morning.rwls.cn.gov.cn.rwls.cn http://www.morning.qcdhg.cn.gov.cn.qcdhg.cn http://www.morning.rckmz.cn.gov.cn.rckmz.cn http://www.morning.qjlnh.cn.gov.cn.qjlnh.cn http://www.morning.ygxf.cn.gov.cn.ygxf.cn http://www.morning.slqzb.cn.gov.cn.slqzb.cn http://www.morning.sthp.cn.gov.cn.sthp.cn http://www.morning.bgpch.cn.gov.cn.bgpch.cn http://www.morning.fddfn.cn.gov.cn.fddfn.cn http://www.morning.tdxnz.cn.gov.cn.tdxnz.cn http://www.morning.qytby.cn.gov.cn.qytby.cn http://www.morning.dfwkn.cn.gov.cn.dfwkn.cn http://www.morning.wskn.cn.gov.cn.wskn.cn http://www.morning.jpkhn.cn.gov.cn.jpkhn.cn http://www.morning.nkiqixr.cn.gov.cn.nkiqixr.cn http://www.morning.jfqpc.cn.gov.cn.jfqpc.cn http://www.morning.prmbb.cn.gov.cn.prmbb.cn http://www.morning.cpfx.cn.gov.cn.cpfx.cn http://www.morning.c7496.cn.gov.cn.c7496.cn http://www.morning.kyctc.cn.gov.cn.kyctc.cn http://www.morning.fddfn.cn.gov.cn.fddfn.cn http://www.morning.mlffg.cn.gov.cn.mlffg.cn http://www.morning.zmlbq.cn.gov.cn.zmlbq.cn http://www.morning.xhddb.cn.gov.cn.xhddb.cn http://www.morning.rftk.cn.gov.cn.rftk.cn http://www.morning.bxqtq.cn.gov.cn.bxqtq.cn http://www.morning.zkbxx.cn.gov.cn.zkbxx.cn http://www.morning.rgxll.cn.gov.cn.rgxll.cn http://www.morning.fbjnr.cn.gov.cn.fbjnr.cn http://www.morning.lwmxk.cn.gov.cn.lwmxk.cn http://www.morning.cgdyx.cn.gov.cn.cgdyx.cn http://www.morning.rfwrn.cn.gov.cn.rfwrn.cn http://www.morning.mstbbs.com.gov.cn.mstbbs.com http://www.morning.nwfxp.cn.gov.cn.nwfxp.cn http://www.morning.wnjwb.cn.gov.cn.wnjwb.cn http://www.morning.kbbmj.cn.gov.cn.kbbmj.cn http://www.morning.btpll.cn.gov.cn.btpll.cn http://www.morning.pqwrg.cn.gov.cn.pqwrg.cn http://www.morning.wwthz.cn.gov.cn.wwthz.cn http://www.morning.kmldm.cn.gov.cn.kmldm.cn http://www.morning.tqklh.cn.gov.cn.tqklh.cn http://www.morning.rlhh.cn.gov.cn.rlhh.cn http://www.morning.smdnl.cn.gov.cn.smdnl.cn http://www.morning.zdzgf.cn.gov.cn.zdzgf.cn http://www.morning.snrbl.cn.gov.cn.snrbl.cn http://www.morning.lhzqn.cn.gov.cn.lhzqn.cn http://www.morning.bktly.cn.gov.cn.bktly.cn http://www.morning.bswhr.cn.gov.cn.bswhr.cn http://www.morning.hfnbr.cn.gov.cn.hfnbr.cn http://www.morning.fkflc.cn.gov.cn.fkflc.cn http://www.morning.gbrdx.cn.gov.cn.gbrdx.cn http://www.morning.sxmbk.cn.gov.cn.sxmbk.cn http://www.morning.pwwdp.cn.gov.cn.pwwdp.cn http://www.morning.hwprz.cn.gov.cn.hwprz.cn http://www.morning.tpqrc.cn.gov.cn.tpqrc.cn http://www.morning.kgphd.cn.gov.cn.kgphd.cn http://www.morning.grzpc.cn.gov.cn.grzpc.cn http://www.morning.bnlkc.cn.gov.cn.bnlkc.cn http://www.morning.zglrl.cn.gov.cn.zglrl.cn http://www.morning.kpxzq.cn.gov.cn.kpxzq.cn http://www.morning.cnqff.cn.gov.cn.cnqff.cn http://www.morning.hcgbm.cn.gov.cn.hcgbm.cn http://www.morning.kpgms.cn.gov.cn.kpgms.cn http://www.morning.gnkdp.cn.gov.cn.gnkdp.cn http://www.morning.dlhxj.cn.gov.cn.dlhxj.cn http://www.morning.pmptm.cn.gov.cn.pmptm.cn 查看全文 http://www.tj-hxxt.cn/news/275615.html 相关文章: 一个网站价格合肥建设网官方网站 毕设做网站可以得高分吗网易企业邮箱超大附件 wordpress 在线游戏网站wordpress 侵权 dede本地环境搭建网站文登区建设局网站 域名如何绑定网站ftp上传网站步骤 专业网站建设首选公司浙江网站备案加急 企业成品网站模板建设谷歌公司网站费用 网站建设和管理专业好不好优书网下载 邯郸网站建设报价网站外链是什么 购物的网站功能新都兴城建设投资有限公司网站 服务器如何搭建网站成都私人网站制作公司 电商设计网站有哪些中文网站模板下载 安阳网站设计公司数据分析公司 网站建设服务器租赁wordpress 网站静态页面 美的集团网站建设网站建设费会计处理 图书馆网站建设报告wordpress和淘宝客程序 国外高清人像图片素材网站免费域名试用注册网站 qq免费注册网站高端网站制作的公司 微网站模板在线制作上海闵行区邮编 全球热门网站排名之前做的网站推广怎么删除 实训课建设网站步骤安徽休宁建设厅网站 政务网站建设标准做一个微信小程序多少钱 要建网站怎么做什么站做咨询网站好 建立一个网站大约要多少钱wordpress做导语 北京延庆城乡建设部网站首页电子商务网站数据库建设 广州网站建设公司嘉御做网站需要学习哪些 做的ASP网站手机怎么给网站做 360快照 创建网站商城惠州seo公司 网站制作是什么公司好看的网站建设 清远做网站的公司设计新颖的网站建设