树莓派linux库 引入 分文件编程 静态库 动态库

分文件编程

1.分文件编程介绍

分文件的编程其实可以理解为多个文件进行的编程
把文件通过功能进行分类 大大提高文件的可读性
比如功能有 网络 串口 超声波 电机等 通过分文件编程的方式把这些功能整合在一起 实现一个具体的大工程,类似于STM32的编程方式

可以让主函数变得简洁

2.分文件编程的例子

分文件编程 表示的是主函数的程序中用的函数
例如 在dema1中

#include <stdio.h>
#include "dema2.h"
int main()
{
  int t1;
  int t2;
  int jia;
  printf("请输入第一个数:");
  scanf("%d",t1);
  printf("请输入第二个数:");
  scanf("%d",t2);
  printf("加数总和是:%d",jia=jia1(t1,t2));
   return 0;
}

在dema2中写函数的代码

#include "dema2.h"
int jia1(int i,int y)
{
   return i+y;

}

主函数要引用dema2的函数需要dema2.h文件
进行函数的声明

#ifndef __DAMA2_H
#define __DAMA2_H
int jia1(int i,int y); //特别注意这里要加分号
#endif  /* 使用宏定义判断*/

防止宏定义重复使用 头文件重复调用
#ifndef
#define
#endif

3.重要提示

头文件是 <> 默认去/usr/include
或者 /usr/local/include 下面去查找
我们自己写的头文件 " " 默认在当前目录下面寻找 当前目录的绝对路径寻找

静态库动态库引入

库是可执行代码的二进制形式,就是将源代码转换成二进制的源代码,相当于对源代码进行了加密,别人可以看见库,但是看不见源代码

使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。

程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)、动态加载函数库(dynamically loaded libraries):

静态函数库

静态库在程序执行前就加入到了程序中
优点:运行快
发布前无需提供静态库,因为已经在文件当中
缺点:占用内存大

1.链接完整拷贝至可执行文件中,多次拷贝就会产生重复拷贝
2.更新、部署、发布麻烦。
每次更新都需要发送给使用者
动态函数库同共享函数库是一个东西(在linux上叫共享对象库, 文件后缀是.so ,windows上叫动态加载函数库, 文件后缀是.dll)
linux中文共享库命名规则
在这里插入图片描述

动态库

优点:
1。链接复制时,不使用,程序执行时临时调用,由x系统动态加载到内存,系统只执行一次,并且可以多次调用
2。程序升级简单,因为程序里面没有库的源码,升级之后只要库的名字不变函数的名字不变参数不变,只是实现做优化,知道成功
缺点:
加载的速度比静态库慢
发布程序需要依赖动态库
因为程序执行是临时调用动态库,所以需要依赖动态库,才能进行程序的运行

1.静态库创建

主函数是可以看到的 但是一些功能模块的代码不希望别人看到 我们就要把这些功能对应的.c 文件 创建静态库文件
使用gcc dema.c -c 生成.o 文件
然后把.o 文件生成静态库文件
使用ar rcs 指令生成静态库文件 .a 表示静态文件
创建静态库

gcc dema2.c -c     //生成.o文件
ar rcs libtestfunc.a dema2.o    //生成libtestfunc.a文件
                     后面的.o  表示要使用的功能文件  .o  可以多个

2.静态库的使用

/lib里面给的是root和内核所需so或者a之类的库文件,而/usr/lib是普通用户能够使用的 更多用于用户的库文件 .a等
-l指定所需的静态库 类似于pthread等
-L让 gcc在指定的目录下面寻找 默认情况下 是在usr/lib下面进行查找

gcc dema1.c -ltestfunc -L./   
//-L表示让gcc从-L指定的目录寻找   默认在usr/lib  或者usr/local/lib里面寻找
//-l是指定要用的静态库   掐头去尾只留下testfunc  lib去掉 .a去掉
//gcc 默认到use/lib里面寻找文件  通过-L./把它定为到当前目录

动态库

1.创建动态库

生成.so文件 so动态 o静态

gcc -shared -fpic xxxx.c -o libde2ma.so
    -shared   指定生成动态库
    -fpic    标准,fPIC 选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码。

2.动态库的使用

gcc dema1.c -lde2ma -L ./ -o mainProDy
    主函数   掐头去尾
             libde2ma.so   -L ./   定位到当前目录    
      

cat 查看
只能在当前的窗口中使用该临时的环境变量 在其他的窗口下面无法使用
表示的是临时的环境变量

export LD_LIBRARY_PATH="/home/pi/back/test"

export 使用这个宏定义    定位到这个文件目录 需要使用""

创建脚本文件 shell

创建 vi start.sh sh文件是脚本文件
这样每次使用的时候就不用重新定义临时环境

export LD_LIBRARY_PATH="/home/pi/back/test"
./demaDy 
//可执行文件

给脚本添加可执行权限

chmod   +x start.sh   //给脚本文件一个可执行权限x

./start.sh 和可执行文件一样

du 指令 计算文件大小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值