树莓派开发——Linux库

一、为什么要用库?

在实际开发中我们不是一个人将整个项目做完而是每个人做不同的操作比如:

  • a员工在开发中做网络的连接
  • b员工做超声波的测距
  • c员工做电机的调试
    这样我们就会得到多个文件,这就是 分文件编程 的思想,这样做的好处有:
  1. 功能责任划分好
  2. 代码好调试
  3. 主程序简洁

二、库详解

  库分为静态库、动态库和共享库
参考文献:
https://www.cnblogs.com/sunsky303/p/7731911.html
https://blog.csdn.net/wk_bjut_edu_cn/article/details/81735956
在这里插入图片描述

  1. 静态库,是在程序执行前(编译)就加入到目标程序中了。
    优点:运行速度快、移植方便
    缺点:程序太大
    在这里插入图片描述

  2. 动态库,是在程序执行时动态(加载这个库)(临时)由目标程序去调用。
    优点:程序小、节省内存
    缺点:运行速度慢
    在这里插入图片描述

三、库的制作

1、静态库的制作

(1) 命名规则
静态库的命名方式为 libxxx.a ,库名前加“lib”,后缀为“.a”,“xxx”为静态库名。
(2) 制作步骤
原材料 calcufunc.c :

#include <stdio.h>

int add(int a,int b)
{
        return a+b;
}
int jian(int a,int b)
{
        return a-b;
}
int cheng(int a,int b)
{
        return a*b;
}
float chu(int a,int b)
{
        int ret;
        ret = a / b;
        printf("%d\n",ret);
        return (float)ret;
}
  1. 先将原材料 .c或者 .cpp ,变为 .o 的文件,在终端中输入以下命令
gcc calcufunc.c -c

生成 calcufunc.o 的文件

  1. 然后生成静态库,在终端中输入以下命令
ar rcs libcalcufunc.a calcufunc.o

将 xxx.o 文件生成 libxxx.a 静态库文件
(3) 静态库的使用

  1. 需要先将头文件导入到主程序中程序中
#include "calcufunc.h"

以下是 calcufunc.h

#include <stdio.h>

int add(int a,int b);
int jian(int a,int b);
int cheng(int a,int b);
float chu(int a,int b);

主程序:

#include <stdio.h>

#include "calcufunc.h"


int main()
{
        int data1,data2;
        int ret;
        float floatret;

        printf("请输入第一个数:\n");
        scanf("%d",&data1);
        printf("请输入第二个数:\n");
        scanf("%d",&data2);

        ret = add(data1,data2);
        printf("%d+%d=%d\n",data1,data2,ret);
        ret = jian(data1,data2);
        printf("%d-%d=%d\n",data1,data2,ret);
        ret = cheng(data1,data2);
        printf("%d*%d=%d\n",data1,data2,ret);
        floatret = chu(data1,data2);
        printf("%d/%d=%f\n",data1,data2,floatret);


        return 0;
}
  1. 编译静态库
gcc calculate.c -lcalcufunc -L ./ -o mainProState

-lcalcufunc -l是指定要用的静态库,记得引用时是砍头去尾
      -L 是告诉编译器从 -L 指定的路径去找静态库,默认情况下失去 /usr/lib 或者 /usr/local/lib 里面找

2、动态库的制作

(1) 命名规则
动态库命名方式为 libcalcufunc.so 库名前加“lib”,后缀为“.so”,“xxx”为静态库名。
(2) 制作步骤

  1. 制作动态库
gcc -shared -fpic calcufunc.c -o libcalculfunc.so

-shared 指定生成为动态库。
-fpic 一种标准,fpic 选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码。

  1. 使用动态库
gcc calculate.c -lcalcufunc -L ./ -o mainProDy

这个时候直接使用会失败,因为目标程序找不到库,所以我们需要指定该程序在运行的时候到指定的位置去找库文件。
参考文献:
https://www.cnblogs.com/progamming/p/13043652.html
我们可以在终端输入
可以指定该程序在运行的时候,在 LD_LIBRARY_PATH 所指定的路径去找库文件

export LD_LIBRARY_PATH="当前pwd的地址(或者主程序所在的地址或者库的位置)"
// 引号可去掉

也可以自己写一个 shell 脚本

export LD_LIBRARY_PATH="当前pwd的地址(或者主程序所在的地址)"

./mainProDy

这个 shell 脚本就是把两个个指令并在一起。

shell 脚本说简单点就是把多个指令并在一起。!!!但并不包含所有。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值