当前位置:网站首页 > 编程语言 > 正文

动态库和静态库的区别(动态库与静态库的区别)



点击上方“机械电子工程技术”关注我们

















在Linux系统编程中,静态库(Static Library)是一种编译后的代码库,它包含了多个编译 单元(比如函数和数据)的集合,这些编译单元可以被多个程序共享。静态库通常以.a为文件后缀。
编译源文件:首先,你需要编写源代码并将其编译成目标文件(Object Files),通常以 .o为后缀。
 
     
       
       
gcc -c source_file.c
这里 -c选项告诉编译器只编译源文件,不进行链接。
创建静态库:使用 ar 工具将所有目标文件打包成 一个静态库。
 
     
       
       
ar rcs liblibrary_name.a object_file1.o object_file2.o ...
    • r:插入文件,如果静态库不存在则创建。
    • c:在创建或插入文件时不进行警告。
    • s:创建索引,用于从库中读取单个文件。
编译时链接:在编译程序时,你需要指定静态库的路径和要使用的库中的对象文件。
 
     
       
       
gcc program.c -L/path/to/library -llibrary_name -o program

    -L:指定静态库的搜索路径。

    -l:指定要链接的库,不要加前缀lib和后缀.a

gcc program.c -L/path/to/library -l:object_file_name.o -o program
设置运行时库路径:如果静态库中包含的代码依赖于特定的库文件,你可能还需要在运行时设置LD_LIBRARY_PATH环境变量,以便程序能找到这些库。
export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH
  • 静态库在编译时被整合到最终的可执行文件中,因此可执行文件的大小会增大。
  • 静态库中的代码在编译时被复制到可执行文件中,因此如果多个程序使用同一个静态库,那么每个程序都会包含一份代码的副本,这可能会导致内存浪费。
  • 使用静态库的程序在运行时不需要静态库文件,因为所有需要的代码都已经包含在可执行文件中了。

通过一个简单的例子来说明静态库的制作与使用:

假设我们有一个简单的数学库,它提供两个函数:add 和 multiply。
编写源代码:首先,我们创建两个源文件 add.cmultiply.c

add.c:

 
     
       
       
int add(int a, int b) { return a + b;}

multiply.c:

 
     
       
       
int multiply(int a, int b) { return a * b;}
编译源文件:使用 gcc 编译这些源文件生成目标文件。
 
     
       
       
gcc -c add.c -o add.ogcc -c multiply.c -o multiply.o
创建静态库:使用 ar 工具将目标文件打包成静态库。
 
     
       
       
ar rcs libmath.a add.o multiply.o
这里,libmath.a 是我们创建的静态库的名称。
现在,我们创建一个程序 main.c,它使用我们的数学库。
编写使用库的程序main.c 使用 addmultiply 函数。

main.c:

 
     
       
       
#include  
              
int add(int, int);int multiply(int, int);
int main() { int sum = add(3, 4); int product = multiply(3, 4);
printf("Sum: %d\n", sum); printf("Product: %d\n", product);
return 0;}
编译程序 在编译 main.c 时,我们需要指定静态库的路径和库名。
 
     
       
       
gcc main.c -L. -lmath -o program
    • -L. 指定了静态库的搜索路径(当前目录)。
    • -lmath 指定了要链接的库,libmath.a 中的 math

运行程序:编译完成后,你可以运行生成的程序。

https://mp.weixin..com/program

输出应该是:

Sum: 7Product: 12

这个简单的例子展示了如何创建一个静态库,并在另一个程序中使用它。记住,静态库在编译时被整合到可执行文件中,因此每次编译使用该库的程序时,都需要指定库的路径和名称。

想了解更多

赶紧扫码关注

到此这篇动态库和静态库的区别(动态库与静态库的区别)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • lda主题模型(LDA主题模型介绍)2026-04-27 11:54:07
  • 越狱源(越狱源sileo)2026-04-27 11:54:07
  • Ubuntu镜像站同步(ubuntu镜像源配置)2026-04-27 11:54:07
  • win32是什么意思(windows32是什么意思)2026-04-27 11:54:07
  • 打开目录导航的命令(如何打开目录导航)2026-04-27 11:54:07
  • hpool怎么读(hpoi怎么读)2026-04-27 11:54:07
  • 反编译exe文件工具ilspy(反编译exe文件成源码)2026-04-27 11:54:07
  • 文件比较工具 查重(文件比较工具 查重怎么弄)2026-04-27 11:54:07
  • m哈是什么意思(么哈是什么)2026-04-27 11:54:07
  • 越狱源怎么用(越狱源怎么搭建)2026-04-27 11:54:07
  • 全屏图片