Linux平台静态库、动态库的制作与使用

Linux平台静态库、动态库的制作与使用

一、静态库

#当前目录结构
├── code
│   ├── include
│   │   └── head.h
│   ├── library
│   │   ├── dynamic_library
│   │   └── static_library
│   └── src
│       ├── c++11_thread
│       ├── createLib
│       │   ├── add.c
│       │   ├── div.c
│       │   ├── main.c
│       │   ├── mult.c
│       │   ├── sub.c

#include目录存放头文件
#src目录存放源文件
#library存放动态库(dynamic_library)和静态库(static_library)

#将createLib下的源文件生成静态库,并存放在static_library中
#先将.c文件编译成.o文件,-I 指定头文件目录
gcc -c add.c div.c mult.c sub.c -I ../../include
#然后使用ar将.o文件打包成静态库文件
ar rcs ../../library/static_library/libcalc.a *.o
	-r:替换
	-c:创建
	-s:索引
#静态库命名规则为libxxx.a,其中lib和.a分别为静态库的前缀和后缀
#静态库的使用,-L指定静态库查找路径,-l指定静态库名(去除前缀和后缀)
gcc main.c -L ~/code/library/static_library -l calc -I ~/code/include/

二、动态库

#先生成与位置无关的.o文件,-fpic使用相对地址记录代码的位置
gcc -c -fpic add.c div.c mult.c sub.c -I ../../include
#生成动态库,动态库命名规则libxxx.so,其中lib和.so分别为动态库的前缀和后缀
gcc -shared *.o -o ../../library/static_library/libcalc.so
#静态库的使用
gcc main.c -L ~/code/library/dynamic_library/ -l calc -I ~/code/include/

执行生成的a.out可能会出现动态库找不到的问题,解决方法:

  • 用户级别:将动态库路径添加到用户配置文件~/.bashrc(这是个隐藏文件)的最后面
#/home/lcx/code/library/dynamic_library是动态库的绝对路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/lcx/code/library/dynamic_library
  • 系统级别:将动态库路径添加到系统配置文件/etc/profile(这是个隐藏文件)的最后面
#/home/lcx/code/library/dynamic_library是动态库的绝对路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/lcx/code/library/dynamic_library

猜你喜欢

转载自blog.csdn.net/qq_44630120/article/details/106305806