码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Linux下库的入门与制作


    库的入门与制作

    • 1. 库的介绍
    • 2. 库的制作与使用
      • 2.1 静态库的制作与使用
      • 2.2 动态库的制作与使用

    参考博文:
    1. Linux中的库
    2. Linux共享库、静态库、动态库详解

    1. 库的介绍

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

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

    优点:

    • 静态库被打包到应用程序中加载速度快
    • 发布程序无需提供静态库,因为已经在app中,移植方便

    缺点:

    • 链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。
    • 更新、部署、发布麻烦。

    动态库:动态函数库,是在程序执行时动态(临时)由目标程序去调用
      同共享函数库是一个东西(在linux上叫共享对象库,文件后缀是.so ,windows上叫动态加载函数库, 文件后缀是.dll)
      
    优点:

    • 链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序可以共用,节省内存。
    • 程序升级简单,因为app里面没有库的源代码,升级之后只要库的名字不变,函数名以及参数不变,只是实现做了优化,就能加载成功。

    缺点:

    • 加载速度比静态库慢
    • 发布程序需要提供依赖的动态库

    2. 库的制作与使用

    2.1 静态库的制作与使用

    1. 库的制作
      格式 xxxx.a

    • 将C文件生成.o 文件:gcc fun.c -c
    • 将.o打包:
      ar rcs 静态库的名字 原材料
      ar rcs libfun.a fun.o

    2. 库的使用

    • -l:指定库的名字(砍头去尾,去掉lib和.a)
    • -L: 指定库的路径,./表当前路径
      gcc main.c -l fun -L ./
      
      • 1

    2.2 动态库的制作与使用

    1. 动态库的制作
      将源文件生成.o文件,需要加参数shared动态库和fpic标准

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

    使用

    gcc main.c -l fun -L ./ 
    
    • 1

    运行程序:
    方案一: 将动态库放入 /usr/lib目录下后运行程序

    sudo cp libfun.so /usr/lib/
    
    • 1

    方案二: 通过环境变量LD_LIBRARY_PATH指定动态库搜索路径。

    export LD_LIBRARY_PATH="/home/pi/study/demo1"
    
    • 1

    临时的,解决方案->脚本
    给脚本加可执行权限:

    chmod +x start.sh 
    
    • 1
  • 相关阅读:
    热像仪:使用 ESP32 和 MLX90640 传感器设计您自己的红外成像设备
    linux设置宽带
    企业微信如何创建微盘共享空间?
    基于多模态融合的非遗图片分类研究
    如何衡量软件系统的复杂度(一)
    python学习笔记(11)---(模块与包)
    【pandas小技巧】--拆分列
    LeetCode 1004.最大连续1的个数
    Open Feign中的RequestInterceptor获取不到HttpServletRequest问题解决方案
    Kotlin 进阶版 协程
  • 原文地址:https://blog.csdn.net/weixin_46216674/article/details/115422583
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号