Linux下用gcc创建静态库与动态库详解

需积分: 15 0 下载量 147 浏览量 更新于2024-08-05 收藏 229KB PDF 举报
本篇文章详细介绍了如何使用GCC(GNU Compiler Collection)在Linux环境中生成静态库(.a)和动态库(.so)。首先,作者强调了函数库的重要性,特别是静态库和动态库的区别,前者在编译时与目标代码合并,运行时无需库文件,而后者只在运行时加载。 文章以创建一个简单的示例程序为例,包括编写hello.h头文件,定义hello()函数,hello.c源文件实现该函数,以及main.c作为测试程序调用hello()。程序的关键部分如下: 1. 编辑并创建所需文件: - hello.h: 定义hello()函数的接口 - hello.c: 实现hello()函数,使用printf输出带参数的消息 - main.c: 包含hello.h头文件,调用hello()函数 2. 将hello.c编译成.o文件: - 使用gcc编译器编译hello.c,生成hello.o文件,这是创建库的基本单元。 3. 创建静态库: - 创建静态库的步骤是将.o文件链接在一起。在Linux中,通常使用ar工具。创建静态库命令如下: ``` ar rcs libhello.a hello.o ``` - 这里`ar`代表archive(归档)工具,`rcs`表示create, replace, and summarize,表示创建一个新的库文件,如果文件已存在则替换,最后给出汇总信息。 4. 创建动态库(共享库): - 动态库使用ld(linker)工具创建,命令如下: ``` gcc -shared -o libhello.so hello.c ``` - `-shared`选项告诉gcc创建一个可动态链接的库,`-o libhello.so`指定输出文件名。 5. 使用静态库和动态库: - 在其他项目中引用静态库,只需将编译命令中添加 `-L. -lhello`(`.`代表当前目录,`lhello`是库名),链接时将hello库引入。 - 对于动态库,同样需要在编译时添加`-L. -lhello`,但在运行时可能需要使用`ldd`检查库的依赖关系,并确保动态链接器能找到它。 总结来说,本文介绍了从源代码创建静态库和动态库的具体步骤,以及在实际开发中如何集成这些库。这对于理解和利用GCC进行软件开发中的模块化和重用是非常实用的技能。通过实例演示,读者可以更好地掌握这个过程,并将其应用于自己的项目中。