嵌入式C开发入门——静态库&动态库

静态库

静态库,所有的库包含在最终可执行文件中,占用空间大,运行速度快.
静态库一般以lib开头命名,以.a后缀结尾

静态库的制作

1. 把所有需要的.c源文件生成对应的.o文件(不包括main函数)

2. 使用工具将所有.o文件打包生成静态库

ar rcs lib库名.a mul.o add.o sub.o

3. 编译的时候添加静态库

gcc 1.c -o 1.o libmylib.a //库文件在当前目录下

编译时gcc库包含相关指令

参数 功能
-L 库文件所在目录
-l(L的小写) 库文件名
-I(i的大写) 头文件所在目录
//链接home目录下的libmylib.a静态库, 包含当前目录下的头文件
gcc 1.c -o run -L /home -lmylib -I ./

动态库

动态库只有在运行的时候才调用,占用空间小,常见库一般都是静态库,如libc
动态库一般以lib开头命名,以.so后缀结尾

动态库制作

1. 把所有需要的.c源文件生成对应的.o文件(不包括main函数)

gcc xxx.c -c -o xxx.o -fPIC

2. 使用工具将所有.o文件打包生成动态库

gcc -shared -o lib库名.so xxx.o

3. 解决动态库路径问题

  • 方法一: 在终端输入(临时添加)
    export LD_ LIBRARY_PATH = 绝对路径`

  • 方法二: 修改终端配置文件~/.bashrc

1. vim  ~/.bashrc
2. export LD_LIBRARY_PATH=库所在目录的绝对路径添加文件最后一行
3. 重启终端或者运行命令 source ~/.bashrc  使用配置文件生效
  • 方法三: 将动态库放到系统默认目录下 ===> /usr/lib

  • 方法四: 配置文件 /etc/ld.so.conf

1. vim /etc/ld.so.conf
2. 将库文件的绝对路径添加到库的最后一行
3. 使配置文件生效:ldconfig -v

ps: ldd a.out可以查看执行文件所依赖的动态库

动态库和静态库在同一个目录下,默认包含的是动态库

4.编译时添加动态库

gcc ./src/main.c -L ./lib -lmylib -I ./include/ -o ./bin/a.out

猜你喜欢

转载自blog.csdn.net/qq_35599308/article/details/84781153