静态库
把目标文件归档
1.编写源代码 add.h add.c sub.h sub.c
2.编译成目标文件
gcc -c add.c ==> add.o
gcc -c sub.c ==> sub.o
3.创建静态库
ar -r liboper.a add.o sub.o ==> 静态库的名字是 oper
在任何一个地方:
如果需要使用到add.h 和 sub.h中的函数时
main.c
#include “add.h”
#include “sub.h”
调用函数
需要注意:
gcc -I [add.h sub.h的路径] main.c -loper -L静态库所在路径
链接静态库
把静态库中的函数一并生成可执行代码到可执行程序中(相当于复制)
链接静态库生成的可执行程序 不依赖于 静态库
静态库的搜索路径可以配置到环境变量中:
export LIBRARY_PATH=LIBRARYPATH:静态库存储的路径在 /.bashrc中添加exportLIBRARYPATH=LIBRARY_PATH:静态库存储的路径
在~/.bashrc中添加
export LIBRARY_PATH=LIBRARYPATH:静态库存储的路径在 /.bashrc中添加exportLIBRARYPATH=LIBRARY_PATH:静态库存储的路径
动态库
1.编写源代码 add.h add.c sub.h sub.c
2.编译
gcc -fpic|-fPIC -c add.c
gcc -fpic|-fPIC -c sub.c
3.生成动态库
gcc -shared add.o sub.o -o libdyoper.so
使用动态库
gcc -I 头文件 main.c -ldyoper -L 动态库存储路径
export LIBRARY_PATH=$LIBRARY_PATH:动态库存储路径
修改~/.bashrc
生成可执行程序
运行可执行程序 a.out 需要依赖于 动态库 libdyoper.so
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:动态库的路径
修改~/.bashrc
即使编译成可执行文件之后
可执行程序依然依赖于动态库文件
-I
-l
-L
CPATH
LIBRARY_PATH
LD_LIBRARY_PATH
liboper.a liboper.so
gcc main.c -loper 链接的是动态库
#include <dlfcn.h>
void *dlopen(const char *filename, int flag);
打开一个动态库文件 把动态库的内容加载到内容
RTLD_LAZY
RTLD_ROW
char *dlerror(void);
void *dlsym(void *handle, const char *symbol);
int dlclose(void *handle);
Link with -ldl.
本文详细介绍了静态库和动态库的创建与使用过程。包括如何通过gcc编译源代码生成目标文件,如何使用ar工具创建静态库,以及如何通过gcc链接静态库生成可执行程序。同时,也讲解了动态库的生成与使用,以及如何设置环境变量以便正确链接库文件。

被折叠的 条评论
为什么被折叠?



