树莓派学习笔记(二)Linux静态动态库

观看学习上官可编程陈立臣老师的树莓派视频,
在其过程中所记录的学习笔记

1.分文件编程

	分模块的编程思想
		a.功能责任划分
		b.方便调试
		c.主程序简洁

2.函数库概念

    函数库可以分为:静态函数库、共享函数库、动态加载库;

    共享函数库和动态加载库实际上是同一个
    Linux中称为共享函数库,以so为后缀,
    Windows中称为动态加载库,以dll为后缀

    静态库,是在程序执行前(链接)就加入到目标程序中去

	优点:运行速度快
		 发布程序时可以不用提供静态库,因为已经在链接时加入目标程序中
	
	缺点:链接使得可执行文件中包含了完整的库代码,多次使用就会有多份冗余拷贝
		 更新、部署、发布程序复杂

    动态库,是在程序执行时动态加载到内存,供目标程序调用

	优点:链接时不拷贝库代码,程序运行时才动态加载到内存,供目标程序调用,不用多次加载,可以节省内存空间
		 更新、部署、发布程序简单

	缺点:运行速度快
		 发布程序时需要提供动态库

3.库的制作

    静态库的制作:命名格式为libxxx.a

gcc xxx.c -c		   (生成xxx.o文件)
ar rcs libxxx.a xxx.o  (xxx.o文件生成libxxx.a静态库文件)

在这里插入图片描述

    动态库的制作:命名格式为libxxx.so

gcc -shared -fpic xxx.c -o libxxx.so (xxx.c文件生成libxxx.so动态库文件)

在这里插入图片描述

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

4.库的链接

静态库:

gcc main.c -lxxx -L ./ -o xxx
例:gcc main.c -lcalcufunc -L ./ -o mainProStatic

在这里插入图片描述

  main.c为主程序C文件
  -lxxx -l是指定要用的静态库,要将库名去掉开头lib和后缀.a
           -lcalcufunc表示使用的静态库名字为libcalcufunc.a
  -L是按指定路径去找静态库,默认是从/usr/lib中找
         ./表示在当前路径下寻找静态库
  -o 指定生成的可执行文件的名字
          mainProStatic为可执行文件名

动态库:(与静态库链接方式相同)

gcc main.c -lxxx -L ./ -o xxx
例:gcc mian.c -lcalc -L ./ -o mainProDy	

在这里插入图片描述

    -lxxx -l是指定要用的动态库,要将库名去掉开头lib和后缀.so
             -lcalc 表示使用动态库名字为libcalc.so

5.运行可执行文件

  静态库:
     ./xxx(直接运行可执行文件即可,原因链接时已拷贝完整的库代码)
在这里插入图片描述

  动态库:
    ./xxx该方式会报错显示无库文件,需要修改一下环境变量LD_LIBRARY_PATH,在LD_LIBRARY_PATH所指定的路径下寻找库文件
在这里插入图片描述
    编写一个shell脚本(vi xxx.sh),内容如下

export LD_LIBRARY_PATH="/home/pi/TestLib" ---(指定路径)
./xxx       ---(可执行文件)

    给shell增加可执行权限(chmod +x xxx.sh

./xxx.sh

在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值