库文件:预先编写好的某些特定功能的代码集合
1、静态库:会在链接时使用,将库中的内容直接链接到最终的可执行文件中。可执行文件中相当于有了静态库的副本,所以执行时不再需要静态库。
windows: xxxx.lib
linux: xxxxx.a
静态库: 功能模块源代码 list.c vector.c set.c map.c stack.c queue.c
C++ 中的STL 线程库 libevent库
将所有的源代码文件编译成中间件
ar crv libxxxxxx.a 所有的中间文件
使用: gcc -o main mian.c -L 库的路径 -l 库的名称
echo $ LD_LIBRARY_PATH 查看环境变量的值
2、动态库(共享库)
动态库在链接时,不会将内容复制到可执行文件中,只是给一个链接。在程序执行时,由操作系统动态加载共享库到内存上来执行。
windows: xxxxx.dll
linux: xxxxxxxx.so
动态库的生成: gcc -shared -fPIC -O libxxxxx.so 功能代码源文件
动态库的使用: gcc -o main main.c -L库的路径 -l 库的名称
操作系统在加载共享库只会在 /lib /usr /lib(只有root用户有权限管理)
修改环境变量: LD_LIBRARY_PATH
如果只是在终端上直接修改,只会对当前终端有效,换一个终端则无效
配置文件:~/. bashrc
exprot LD_LIBRARY_PATH = 库的绝对路径
echo $ LD_LIBRARY_PATH 查看环境变量的值
静态库和动态库的区别:
静态库在链接时将用到的方法包含到最终生成的可执行程序中
动态库不包含,只做标记,在运行程序时才动态加载
总结:静态库和动态库的区别: 静态库在链接时使用
动态库在执行时使用