库
环境是CentOS 7
库文件:不包含main函数的函数文件(里面有.c和.h文件)
由于.h文件是.c文件的头文件,预处理会直接加载处理到.c中,所以在生成库文件时,只需要处处理.c文件
一下演示的库文件是 main.c 生成的动态库文件是 libchild.so 生成的静态库文件是libchild.a
库文件的命名习惯
动态库文件 |
静态库文件 |
lib+文件名+.so |
lib+ 文件名 +.a |
库的生成
动态库的生成 |
静态库的生成 |
gcc -c main.c -o main.o 【只有当文件编译成机器语言程序时,才能进行下一步的链接操作】 |
|
gcc --share main.o -o llibchild.so |
ar -cr libchild.a main.o |
库的使用
生成可执行程序时的库文件的搜索路径
命令实例 | 命令解释 |
|
1、生成一个可执行程序时,如需要第三方库,需要将第三方库放置在指定路径下 /lib64 /usr/lib64 |
gcc main.c -o mian -lmychild |
把一个main.c文件生成一个main的可执行程序,-o是指定生成可执行程序的名字。-l后面紧跟库名称(库文件的命名是 [ lib名称.so]),这里的child就是库名称 |
2、也可以指定一个环境变量 expert LIBRARY_PATH=. 来指定库文件的搜索路径 |
expert LIBRARY_PATH=路径 |
|
3、也可以是gcc 的-L选项指定库文件的链接路径 |
gcc main.c -o mian -L . -lmychild |
下面这个多加来 【-L 搜索路径】 |
执行可执行程序时库文件的搜索路径(使用静态库生成的可执行程序不需要加载库文件)
1、程序运行时,需要到指定的目录下加载动态库 /lib64 /usr/lib64 ······ |
把库文件放置在 /lib64 /usr/lib64 ······ |
2、也可以使用 expert LD_LIBRARY_PATH=. 环境变量来设置,来声明程序运行时的库的加载路径 |
expert LD_LIBRARY_PATH=路径 添加环境变量 |