首页 > 试题广场 >

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

[问答题]
静态库和动态库如何制作及使用,区别是什么
静态库和动态的区别 - 静态库 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 回复(1)
g++ -c g++ -fPIC -shared 如果静态库里的变量跟新的化 静态库需要重新编译 在进行使用 动态库不需要 静态库相当于一起编辑 可执行程序运行快 动态库开销大 需要查找相应的库函数在进行连接
发表于 2022-05-18 14:10:34 回复(0)
静态库在链接阶段的进行组合,动态库在运行时加载
发表于 2022-07-05 20:58:12 回复(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)
静态库制作:用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)
静态库会在编译时放在可执行文件里,文件占用空间更大,而动态库是在运行时去查找,然后链接;使用静态库的工程运行速度更快,而且进行移植时不需要打包库;但是静态库更新时工程需要重新编译,使用动态库则不用。
发表于 2024-07-04 19:43:26 回复(0)
静态链接库是在编译链接时直接将所需要的代码拷贝到调用处。优点是程序在发布时不用依赖库,可以独立执行;缺点是程序的体积会相对较大,而且当静态链接库更新时,需要重新编译链接。动态链接库是在编译阶段不直接拷贝代码,而是记录一些符号和参数,在程序运行时将这些参数和符号传递给操作系统,由操作系统将需要的库加载到内存,当程序执行到指定代码时,在共享可执行内存中寻找已经加载的动态库可执行代码,实现运行时链接。优点是多个程序可共享同一个动态链接库,缺点是可能影响程序前期执行的效率。
发表于 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)
静态库:使用gcc -c xxx.c获得xxx.o 使用 ar rcs -o libxxx.a xxx.o将.o文件打包 编译链接静态库:gcc -o main main.c -L. lxxx 动态库:使用gcc -shared -fPIC -o libxxx.so xxx.c编译为动态库 gcc -o main main.c -L. lxxx 在程序运行之前还要配置动态库的加载路径,否则程序可能无法找到动态库 区别:静态库在程序编译时直接将静态库中的代码嵌入到可执行文件中;动态库在程序运行时才会被加载到内存中。
发表于 2025-04-18 21:17:22 回复(0)
静态库:在程序编译的时候就链接到目标代码中 优点:程序运行的时候不需要该静态库,运行速度较快,移植性更好 缺点:静态库的代码复制到了程序中,因此体积较大,静态库升级后要重新编译链接 制作:先gcc -c xxx.c -o xxx.o编译,再ar -cr libxxxx.a xxx1.o xxx2.o将.o文件制作为库文件 动态库:在程序运行的时候载入到程序代码中 优点:因为是在运行时加载动态库,程序代码体积小。程序升级简单,不同的程序如果要调用同一个动态库,内存中只需要有一份该库的实例 缺点:运行的时候需要动态库的存在,移植性较差 制作:gcc -fPIC -shared xxx1.c xxx2.c ... -o libxxx.so
发表于 2025-04-18 19:56:03 回复(0)
制作: 静态库:libxxx.a,libxxx.lib gcc获得.o文件,使用ar工具将.o文件打包,编译时使用 -L 链接 动态库:libxxx.so libxxx.dll gcc得到.o文件,gcc得到动态库,使用-L链接 区别: 静态库在编译时会将静态库中的代码打包到可执行程序中 动态库在程序运行时加载
发表于 2025-04-01 09:28:39 回复(0)
g++ -c xxx.c xxx.c ar rcs xxx.a xxx.o g++ -c -fpic xxx.c gcc -shared a.o b.o -o libcalc.so 区别:命名方式:静态库--xxx.a 动态库 ---xxx.so 加载时间:静态库 ---链接阶段 动态库 ---运行阶段 记载内容:静态库 ---全部加载 动态库 ---按需加载
发表于 2025-03-25 19:04:50 回复(0)
动态库需要先malloc申请下内存然后才能使用并且在使用结束后你需要手动释放,静态内存运行时自动申请内存程序结束自己释放
发表于 2025-03-14 23:53:23 回复(0)
add_library(target SHARED ".cpp")
发表于 2025-03-13 16:00:24 回复(0)
1、静态库的制作和使用: 制作:比如ku.c为例 先通过gcc -c ku.c -o ku.o 获得.ku.o文件。然后通过ar工具ar rcs libku.a ku.o归档为静态链接库,命名为libxxx.a 使用:gcc main.c -L. -lku -o ku 2、动态库的制作和使用: 制作:gcc -fPIC -shared -o libku.so lib.c 使用:配置动态连接器的库路径 export LD_LIBRARY_PATH,然后gcc main.c -L. -lku -o main 3、区别 静态库在编译时链接,生产的可执行文件包含库的代码,静态库在运行时链接,生产的可执行文件不包括库的代码,而是在运行时从系统中加载库。 静态库生成的可执行文件大,动态库生成的小。 静态库每个使用它的可执行文件都会包含一份库代码。动态库代码可以被多个可执行文件共享。 静态库更新时需要重新编译,动态库只需要替换库文件。 静态库的可执行文件独立,不依赖外部库文件 动态库的可执行文件依赖外部库文件
发表于 2025-03-05 13:47:48 回复(0)
gcc -c xxx.c -o xxx.o ar rcs xxx.a xxx.o gcc -fpic -c xxx.c -o xxx.o gcc -shared -o xxx.so xxx.o //或 gcc -fpic -shared -o xxx.so xxx.c
发表于 2025-03-03 23:56:53 回复(0)