gcc静态库和动态库的生成与使用

目录

 一、用 gcc 生成 .a 静态库和 .so动态库

(一)编辑生成例子程序 hello.h、hello.c 和 main.c

 (二)将hello.c编译成.o文件

 (三)由.o文件创建静态库

(四)在程序中使用静态库

(五)由.o文件创建动态库文件 

 (六)在程序中使用动态库

 二、Linux 下静态库.a 与.so 库文件的生成与使用

(一)准备工作

(二)静态库.a 文件的生成与使用

(三)共享库.so 文件的生成与使用

 三、自建函数静态库.a与.so库文件的生成与使用

 (一)编写函数代码

(二)静态库.a 文件的生成与使用

 (三)共享库.so 文件的生成与使用

四、总结 

五、参考文献

一、用 gcc 生成 .a 静态库和 .so动态库

(一)编辑生成例子程序 hello.h、hello.c 和 main.c

1.创建文件test1

mkdir test1//创建文件夹test1
cd test1//打开文件夹test1

2.用Vim编辑器新建一个hello.c文件并输入hello.c的代码

gcc静态库和动态库的生成与使用_第1张图片

3.用Vim编辑器新建一个hello.h文件并输入hello.h的代码

4..用Vim编辑器新建一个main.c文件并输入main.c的代码

gcc静态库和动态库的生成与使用_第2张图片

 (二)将hello.c编译成.o文件

1.使用gcc工具,输入gcc -c hello.c命令,将hello.c编译成.o文件

2.运行ls命令看看是否生存了 hello.o 文件

 (三)由.o文件创建静态库

静态库文件名的命名规范是以 lib 为前缀,紧接着跟静态库名,扩展名为.a。

1.输入以下命令创建静态库

ar -crv libmyhello.a hello.o

2.运行ls命令看看静态库是否生成

(四)在程序中使用静态库。

注意,gcc 会在静态库名前加上前缀 lib,然后追加扩展名.a 得到的静态库文件名来查找静态库文件。

1.输入命令

gcc main.c libmyhello.a -o hello

2.输入./hello命令运行程序,得出运行结果

(五)由.o文件创建动态库文件 

动态库文件名命名规范和静态库文件名命名规范类似,也是在动态库名增加前缀 lib,但其 文件扩展名为.so。

1.输入以下命令创建动态库

gcc -shared -fPIC -o libmyhello.so hello.o

2.运行ls命令看看动态库文件是否生成 

 (六)在程序中使用动态库

1.输入命令

gcc main.c libmyhello.so -o hello

2.输入./hello命令运行程序

3.上述出现错误,原因分析

 错误提示,找不到动态库文件 libmyhello.so。程序在运行时, 会在/usr/lib 和/lib 等目录中查找需要的动态库文件。若找到,则载入动态库,否则将提 示类似上述错误而终止程序运行。我们将文件 libmyhello.so 复制到目录/usr/lib 中,再试试。

4.解决问题

用管理员权限,将 libmyhello.so 复制到目录/usr/lib
输入命令sudo cp -i libmyhello.so /usr/lib 

 5.再次输入./hello命令运行程序,得出结果

 二、Linux 下静态库.a 与.so 库文件的生成与使用

(一)准备工作

1.创建文件test2

mkdir test2//创建文件夹test2
cd test2//打开文件夹test2

2.用 vim文本编辑器编辑生成所需要的四个文件 A1.c 、 A2.c、 A.h、 test.c 

A1.c:

 A2.c:

gcc静态库和动态库的生成与使用_第3张图片

A.h:

gcc静态库和动态库的生成与使用_第4张图片

test.c:

gcc静态库和动态库的生成与使用_第5张图片

(二)静态库.a 文件的生成与使用

1.生成目标文件

2.运行ls命令查看生成的目标文件

3.生成静态库.a 文件

4.使用.a 库文件,创建可执行程序(若采用此种方式,需保证生成的.a 文件与.c 文件保 存在同一目录下,即都在当前目录下)

5.输入./test运行程序,得出结果

(三)共享库.so 文件的生成与使用

1.生成目标文件(此处生成.o 文件必须添加"-fpic"(小模式,代码少),否则在生成.so 文件时会出错)

2.生成共享库.so 文件

 3.使用.so 库文件,创建可执行程序

 4.出现错误

5.解决方法

 用管理员权限,将 libsofile.so 复制到目录/usr/lib
输入命令sudo cp -i libsofile.so /usr/lib

6. 再次输入./test命令运行程序,得出结果

 三、自建函数静态库.a与.so库文件的生成与使用

 (一)编写函数代码

1.创建x2x.c文件,并编写代码

 gcc静态库和动态库的生成与使用_第6张图片

 2.创建x2y.c文件,并编写代码

 gcc静态库和动态库的生成与使用_第7张图片

 3.创建x.h文件,并编写代码

 

 4.创建main.c文件,并编写代码

gcc静态库和动态库的生成与使用_第8张图片

(二)静态库.a 文件的生成与使用

1.生成目标文件

 2.运行ls命令查看生成的目标文件

 3.生成静态库.a 文件

 

 4.使用.a 库文件,创建可执行程序

5.输入./main运行程序,得出结果

gcc静态库和动态库的生成与使用_第9张图片

 (三)共享库.so 文件的生成与使用

1.生成目标文件(此处生成.o 文件必须添加"-fpic"(小模式,代码少),否则在生成.so 文件时会出错)

2.生成共享库.so 文件

3.使用.so 库文件,创建可执行程序

4.出现错误

5.解决方法

 用管理员权限,将 xy.so 复制到目录/usr/lib
输入命令sudo cp -i xy.so /usr/lib

6. 再次输入./main命令运行程序,得出结果

四、总结 

通过本次实验,我学会了如何生成静态库.a文件和动态库.os文件,函数调用静态库和动态库的方法。学会了如何生成目标文件,生成可执行的程序。

五、参考文献

gcc静态库和动态库的生成以及使用_一只特立独行的猪️的博客-CSDN博客_gcc 静态库
 

用gcc生成静态库和动态库.pdf

静态库.a与.so库文件的生成与使用.pdf


 

 

你可能感兴趣的:(linux,运维,服务器)