Linux库概念及相关编程

Linux库概念及相关编程

分文件编程案例

好处:分模块的编程思想

网络 a

超声波b

电机c

a.功能责任划分

b.方便调试

c.主程序简洁

 

fxadd.c

/*
功能性的函数
    1、串口
    2、网络
    3、线程
    4、语音
    5、加减乘除法
*/
#include <stdio.h>
#include <stdlib.h>
#include "funcsadd.h"

int main()
{
    int data1;
    int data2;
    int ret;
    while(1)
    {
    printf("please input your need first number::::\n");
    scanf("%d",&data1);
    printf("please input your need second number::::\n");
    scanf("%d",&data2);
    
    ret=add(data1,data2);
    printf("it is %d+%d=%d\n",data1,data2,ret);
    }
    return 0;
}

funcsadd.c

int add(int x,int y)
{
    int z;
    z=x+y;
    return z;
}

funcsadd.h 

int add(int x,int y);

为什么 要把 funcsadd.h放进fxadd.c  实际上是自己写的库 就好比 include也是 库 在 Linux里的命令是

这样去查看 include<>里的库函数  “”则是自己弄的

库的概念

https://www.cnblogs.com/sunsky303/p/7731911.html

https://blog.csdn.net/wk_bjut_edu_cn/article/details/81735956

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

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

1、静态函数库,是在程序执行前就加入到目标程序中去了 ;

2、动态函数库同共享函数库是一个东西(在linux上叫共享对象库, 文件后缀是.so ,windows上叫动态加载函数库, 文件后缀是.dll)

Linux中命名系统中共享库的规则

1.静态库

静态函数库,是在程序执行前(编译)就加入到目标程序中去了 ;

优点: 运行快

      发布程序无需提供静态库,因为已经在app中,移植方便

缺点:大

2.动态库 

动态函数库,是在程序执行时动态(临时)由目标程序去调用

缺点: 运行慢

优点: 小

库的生成和使用 

静态库 xxxx.a

制作步骤:

第一步:

将源文件生成.o,需要加一个参数fpic
gcc a.c b.c -c -fpic(fPIC)

gcc funcsadd.c  生成xxxx.o文件

第二步:

将.o打包,

ar rcs 静态库名字 原材料

arc rcs  libtest.a a.o 

ar rcs libaddfunc.a funcsadd.o 把xxxx.o文件生成xxxx.a静态库文件

mv funcsadd.* ~   是将funcsadd.c funcsadd.o funcsadd.h移到工作目录/home/

cp ~/funcsadd.h .    是讲/home/目录下的文件复制到当前我光标所在的目标文件里

报错 为什么 因为 -l是像头文件会优先去 ls /usr/lib/去找

我们要让它在 当前路径去找 gcc fxadd.c -laddfunc -L ./ 

(-laddfunc -l是制定要用的动态库,库名砍头去尾

-L告诉gcc编译器从-L制定的路径去找静态库。默认是从/usr/lib  /usr/local/lib去找)

静态库的使用:gcc fxadd.c -laddfunc -L ./ -o mainProStatic

动态库  xxxx.so

动态库的生成:

gcc -shared -fpic funcsadd.c -o libadd.so

        -shared 指定生成动态库

        -fpic 标准,fPIC 选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码。

动态库的使用:

gcc fxadd.c -ladd -L ./ -o mainProDy

编译起动态库 编译不起来 为什么??找不到这个动态库??

动态库是运行的时候一直去找那个 libadd.so  可是一直找不到

办法是:sudo cp libadd.so /usr/lib/ 

它是默认在 /usr/lib/去找  那如何在当前路径去找呢?

引用动态库,怎么指定动态库的位置

https://www.cnblogs.com/progamming/p/13043652.html

 

带动态库的程序,

可以指定该程序运行时候,在LD_LIBRARY_PATH 所指定的路径去找库文件

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

去vi start.sh 里面加入上面这个export LD_LIBRARY_PATH="/home/pi/back/test“

"这只是个脚本文件

sudo是超级用户权限

du  计算文件大小

猜你喜欢

转载自blog.csdn.net/weixin_46016743/article/details/112774646