Linux下gcc编译静态与动态库详解

需积分: 9 4 下载量 128 浏览量 更新于2024-09-12 收藏 21KB DOCX 举报
本文主要介绍了在Linux环境下使用GCC编译器创建和使用动态和静态链接库的过程。首先,理解静态库与动态库的区别:静态库在编译时会被合并到目标代码中,运行时不依赖库文件;而动态库只在运行时加载,程序需要库文件的存在。 1. 编写示例程序: - hello.c: 包含一个名为`my_lib_function`的公用函数,用于输出字符串。 - test.c: 调用`my_lib_function`,展示其使用场景。 2. 编译为.o文件: - 使用GCC编译hello.c生成hello.o文件,这是静态库和动态库的基本构建单元。 ``` $ gcc -c hello.c ``` 3. 创建静态库(.a文件): - 使用`ar`命令创建名为`libmyhello.a`的静态库,包含hello.o文件。 ``` $ ar crv libmyhello.a hello.o ``` 静态库文件名遵循`lib前缀 + 库名 + .a后缀`的命名规则。 4. 在程序中使用静态库: - 在test.c中包含`my_lib_function`的原型声明,并在编译时指定静态库路径和名称。 ``` $ gcc -o test test.c -L. -lmyhello ``` `-L`选项指定库搜索路径,`.`表示当前目录,`-lmyhello`告诉GCC使用myhello库。 5. 检验静态库链接: - 删除静态库后,程序依然能运行,证明`my_lib_function`已经成功链接到目标文件中。 ``` $ rm libmyhello.a $ ./test libraryroutinecalled ``` 6. 动态库的创建与使用: - 动态库的创建过程类似,但使用`.so`(shared object)作为扩展名,如libmyhello.so。 - 在使用动态库时,链接时需要加上`-ldl`(dynamic linking library)选项,以处理动态加载。 总结来说,GCC编译动态和静态链接库的关键在于正确地使用`gcc`、`ar`等工具,并了解库的链接方式和路径配置。对于开发过程中频繁使用的功能,创建库可以提高代码复用性和可维护性。