首页 > 试题广场 >

静态库和动态库如何制作及使用,区别是什么

[问答题]
静态库和动态库如何制作及使用,区别是什么
静态库和动态的区别 - 静态库 gcc 进行链接时,会把静态库中代码打包到可执行程序中,编译时加载;发布程序时无需提供静态库,移植方便;消耗内存,更新部署发布麻烦。 - 动态库 gcc 进行链接时,动态库的代码不会被打包到可执行程序中,运行时加载;发布程序时需要提供动态库;内存占用小,更新部署发布简单。
发表于 2023-04-09 21:53:26 回复(0)
库是一个代码仓库,封装了一些可以直接用的变量,函数或者类。 静态库在程序的链接阶段被复制到程序中,动态库在执行过程中由系统动态加载到内存中。 好处是:1.代码保密。2.方便部署和开发。 1.静态库制作和使用。 -命名: libxxx.a -制作: 1.获得.o文件 gcc -c xxx.c xxx.c 2.将.o文件打包 ar rcs libxxx.a xxx.o xxx.o -使用:gcc main.c -o app -I ./include/ -l calc -L ./lib 2.动态库的制作与使用 -命名: libxxx.so -制作: 1.gcc 得到.o文件 得到和位置无关的代码 gcc -c -fpic a.c b.c 2.gcc得到动态库 gcc -shared a.o b.o -o libcalc.so -使用: 编译时通过 -l calc ,还要配置加载路径 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: 动态库所在的绝对路径
发表于 2023-07-25 11:23:49 回复(0)
g++ -c g++ -fPIC -shared 如果静态库里的变量跟新的化 静态库需要重新编译 在进行使用 动态库不需要 静态库相当于一起编辑 可执行程序运行快 动态库开销大 需要查找相应的库函数在进行连接
发表于 2022-05-18 14:10:34 回复(0)
静态库在链接阶段的进行组合,动态库在运行时加载
发表于 2022-07-05 20:58:12 回复(0)
静态库制作:用gcc将源代码编译为目标代码,使用ar工具将多个目标代码归档为一个静态库文件。使用:静态库使用需要库文件和头文件,程序编译时通过“_|静态库名”参数进行编译。动态库制作:gcc中的share命令将源代码编译为目标代码,生成.so的动态库文件。使用:动态库的使用需要头文件和库文件,编译时需要通过“_|动态库名”参数进行编译,在运行程序之前还需要配置动态库的加载路径,程序才能正常运行。区别:静态库发布时无需提供静态库,移植方便,消耗内存,库更新了所有该静态库的程序都需要全部重新编译和链接。动态库占用内存小,更新时只需要替换动态库文件本身,所有依赖该库的程序在下次运行时自动更新新版本的库。
编辑于 2024-01-27 17:31:36 回复(0)
1、静态库:1)命名以.a结尾,文件名lib+库名.a 2) 编译静态库:g++ -g -o libpublic.a public.cpp 3) 使用静态库:(两种方式:1、编译的时候直接使用:g++ -g book book.cpp libpublic.a 2、指定目录和库名:g++ -o book book.cpp -L/freecplus -lpublic ) 2、动态库:1)命名以.so结尾,文件名lib+库名.so 2) 编译动态库:g++ -fPIC -shared -o libpublic.so public.cpp 3) 使用动态库:(两种方式:1、编译的时候直接使用:g++ -g book book.cpp libpublic.so 2、指定目录和库名:g++ -o book book.cpp -L/freecplus -lpublic ) 3、静态库和动态库的区别:静态库 gcc 进行链接时,会把静态库中代码打包到可执行程序中,编译时加载;发布程序时无需提供静态库,移植方便;消耗内存,更新部署发布麻烦。这里其实说的是:当你使用生成静态编译库之后,其他文件使用该静态库生成可执行文件,你修改了源程序进行编译生成了静态库,但是没有将模板的源文件继续编译,那么原来的可执行程序使用的就还是之前的静态库 - 动态库 gcc 进行链接时,动态库的代码不会被打包到可执行程序中,运行时加载;发布程序时需要提供动态库;内存占用小,更新部署发布简单。,这个原理与静态库相似:修改cpp文件编译生成动态库会影响之前使用过该动态库编译生成的可执行文件
编辑于 2023-03-15 14:36:30 回复(1)
静态链接库是在编译链接时直接将所需要的代码拷贝到调用处。优点是程序在发布时不用依赖库,可以独立执行;缺点是程序的体积会相对较大,而且当静态链接库更新时,需要重新编译链接。动态链接库是在编译阶段不直接拷贝代码,而是记录一些符号和参数,在程序运行时将这些参数和符号传递给操作系统,由操作系统将需要的库加载到内存,当程序执行到指定代码时,在共享可执行内存中寻找已经加载的动态库可执行代码,实现运行时链接。优点是多个程序可共享同一个动态链接库,缺点是可能影响程序前期执行的效率。
发表于 2023-09-21 15:10:42 回复(0)
静态库在编译时链接,动态库在运行时加载
发表于 2023-09-12 15:12:30 回复(0)
静态库 Linux:libxxx.a windows: libxxx.lib,gcc xxx.c xxx.c -c 获得 .o 文件,ar rcs libxxx.a xxx.o xxx.o 使用静态库需要库文件和头文件,编译通过 “-I 静态库名”进行编译。动态库的制作,命名规则 Linux: libxxx.so。静态gcc链接时打包进应用程序,发布程序不需要静态库,方便移植,更新部署发布麻烦,动态,运行时加载,发布程序时需要提供动态库,内存占用小,更新部署发布简单。
发表于 2023-08-24 13:29:08 回复(0)
静态库gcc时,会把静态库中代码打包到可执行程序中,编译时加载;发布程序时,无需提供静态库,移植方便;消耗内存,更新部署麻烦。动态库gcc进行链接时,动态库的代码不会被打包到可执行程序中,运行加载,发布程序时需要提供动态库;内存占用小,更新部署发布简单。
发表于 2023-08-18 16:55:27 回复(0)
制作静态链接库编译源文件到目标文件,使用ar rcs将多个目标文件打包为静态链接库。制作动态链接库需要在编译的时候加上额外的参数-fPIC -shared,使用-o指定动态链接库的名称。使用静态链接库和动态链接库在编译选项上添加-l和要链接的库即可,默认使用动态链接,可使用-static 强制使用静态链接。静态链接库最后会被包含进生成的目标,这样做会增大目标体积,但是性能上会比使用动态链接库高。动态链接库是在运行时被装载的,因为是运行时操作,所以会有额外的性能开销,但是现代操作系统一般会进行惰性加载,热缓存,库打桩来减少这种开销。
发表于 2024-03-29 18:30:29 回复(0)
命名方式: 静态库:linux(libxxx.a),windows(libxxx.lib) 动态库:linux(libxxx.so),windows(libxxx.dll) 制作方式: 静态库:gcc a.cpp -o liba.a或者gcc a.cpp a.o ar rcs liba.a a.o 动态库:gcc fPIC -shared a.cpp a -o liba.so 使用:gcc b.cpp -la 和设置LD_LIBRARY_PATH 静态库:编译链接时加载,存在复制多份的情况, 动态库:程序执行时加载,减少内存
编辑于 2024-03-27 07:36:40 回复(0)
用GNU的编译器工具进行构建:静态库用ar,在生成可执行文件的时候进行静态链接,这些库程序是直接写入到可执行文件中的,所以后续将静态库删除,这些程序也可以运行;动态库在构建的时候需要加上-fPIC -shared,也就是Position Independent Code,地址无关的二进制代码,我们在运行的时候指定动态链接库位置即可。
发表于 2024-03-21 11:18:47 回复(0)
1. 静态库的制作和使用 - 命名规则 Linux : libxxx.a lib : 前缀(固定) xxx : 库的名字,自己起 .a : 后缀(固定) Windows : libxxx.lib - 制作 a.gcc 获得 .o 文件 gcc xxx.c xxx.c -c b.将 .o 文件打包,使用 ar 工具(archive) ar rcs libxxx.a xxx.o xxx.o - 使用 静态库使用需要有库文件和头文件,编译程序时通过 “-l 静态库名” 参数进行编译。 2. 动态库的制作 - 命名规则 Linux : libxxx.so lib : 前缀(固定) xxx : 库的名字,自己起 .so : 后缀(固定) Windows : libxxx.dll - 制作 a.gcc 得到 .o 文件,得到和位置无关的代码 gcc -c –fpic/-fPIC a.c b.c b.gcc 得到动态库 gcc -shared a.o b.o -o libcalc.so - 使用 动态库使用需要有库文件和头文件,编译程序时通过 “-l 动态库名” 参数进行编译。在运行程序之前还需要配置动态库的加载路径,程序才能够正常运行。 3. 静态库和动态的区别 - 静态库 gcc 进行链接时,会把静态库中代码打包到可执行程序中,编译时加载;发布程序时无需提供静态库,移植方便;消耗内存,更新部署发布麻烦。 - 动态库 gcc 进行链接时,动态库的代码不会被打包到可执行程序中,运行时加载;发布程序时需要提供动态库;内存占用小,更新部署发布简单。
编辑于 2024-03-17 16:25:31 回复(0)
静态库:.lib(win) .a(linux) 动态库: .dll(win) .so(linux) 如何制作: 静态库: 先gcc获得.o文件 然后将.o文件打包,使用静态库使用需要有库文件和头文件,编译程序时通过“-l 静态库名” 参数进行编译 动态库:先gcc获得.o文件 然后 gcc -shared a.o b.o -o libcalc.so得到动态库
编辑于 2024-03-17 11:02:34 回复(0)
静态库是一整个文件包含所有需要的文件,生成一个可执行文件,在链接的时候参与到文件的执行当中去;动态库是在编译的时候决定需要哪些函数,把这些函数单独放在一个文件中进行编译后在链接的时候和可执行文件一起运行。区别是在静态库修改的时候需要重新来再编译一次,需要同时修改可执行文件;动态链接只需要重新编译动态库,之后将动态库和可执行文件一起执行就可以了。静态库可能较慢一些,毕竟可执行文件需要重新编译、链接等,动态库只需要最后一起运行就行,动态库可以自行执行上述过程。但有时候动态库需要修改的次数要多一些,因为只是将部分函数代码包装,而静态库可能修改的次数就要少一些。
编辑于 2024-03-12 18:41:59 回复(0)
静态库 命名 libxxx.a 制作:g++ -o libxxx.a test.cpp 使用:g++ -o test test.cpp libxxx.a 动态库 命名 libxxx.so 制作 g++ -fpic-shared-o libxxx.so test.cpp -fpic告诉编译器生成位置无关的代码 -shared 告诉编译器生成共享库 使用 g++ -o test test.cpp libxxx.so 区别:静态库在在编译时加载,消耗更多内存,更新部署麻烦,动态库在运行时才被加载到内存中,消耗叫少内存,更新部署简单
编辑于 2024-03-07 14:38:30 回复(0)
静态库制作1.gcc -c a.c b.c c.c d.c 2.ar rcs libabcd.a a.o b.o c.o d.o 3.gcc main.c -I ./include/ -l abcd -L ./lib/
发表于 2024-03-03 12:42:49 回复(1)
动态库和静态库的区别,静态库会在编译阶段进行库的连接,动态库会在运行时进行加载
编辑于 2024-02-28 22:42:04 回复(0)
静态库:编译时就要加载,所以发布程序时不需要提供静态库; 动态库:运行时才加载,发布程序时需要同时提供动态库,内存占用小,适合更新版本。
编辑于 2024-02-28 20:42:21 回复(0)