c语言编程笔录

首页 >   > 笔记大全

笔记大全

C静态库与动态库文件怎么生成和使用

更新时间:2023-10-25

静态库生成和使用

静态库是一组对象文件的打包,是编译链接的一个结果。在编译链接阶段,静态库中的所有对象文件都被合并到目标文件中,可直接生成可执行程序。

静态库的生成可以通过gcc编译器进行,具体的步骤如下:

// 生成静态库
gcc -c xxx.c             // 编译xxx.c文件,生成xxx.o
ar rcs libxxx.a xxx.o    // 把xxx.o打包到静态库libxxx.a中

// 使用静态库
gcc main.c -L. -lxxx     // 把静态库libxxx.a链接到main.c中
./a.out                  // 运行生成的可执行程序

动态库生成和使用

动态库是在程序运行时由系统动态加载的,可以被多个程序共享。与静态库不同的是,动态库的链接并没有像静态库那样直接完成,而是需要在程序运行时进行。

动态库的生成同样可以通过gcc编译器进行,具体的步骤如下:

// 生成动态库
gcc -c -fPIC xxx.c         // -fPIC参数告诉编译器生成代码是位置无关的
gcc -shared -o libxxx.so   // 把xxx.o打包为动态库libxxx.so

// 使用动态库
gcc -o main main.c -L. -lxxx  // -l参数告诉编译器链接动态库libxxx.so
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./   // 指定动态库搜索路径
./main

静态库与动态库的区别

静态库和动态库的主要区别在于:

  • 静态库在编译链接后与可执行文件合并,而动态库并不会被链接到可执行文件中,而是在程序运行时通过动态链接库加载。
  • 静态库不会被其它程序共享,而动态库可以被多个程序同时共享。
  • 静态库的使用不受操作系统影响,而动态库的使用需要依赖操作系统的支持。
  • 静态库的大小比较大,而动态库的大小比较小。
  • 静态库的更新需要重新编译整个程序,而动态库的更新只需要更新动态库即可。

总结

静态库和动态库是程序员在开发过程中需要了解的基本概念。静态库和动态库都可以通过gcc编译器生成,静态库会被链接到可执行程序中,而动态库则是运行时动态加载。静态库不会被其它程序共享,而动态库可以被多个程序共享。同时,静态库的更新比较麻烦,而动态库的更新则相对较简单。