动静态库原理

news2024/11/24 22:49:53

静态库.a

lib文件夹,存放着所有的库。

我们想写了自己的部分功能实现和代码,很多个.0和.h  但是实现文件太多了,我们把它打包在一起就是静态库。

那么如何打包呢?ar命令

ar -rc libhello.a mython.o myprintf.0
r 代表打包 c创建  前面必须有lib后缀有.a

这样就会形成libhello.a的静态库

打包我们可以在makefile里面来写

那么做好只会该怎么发布呢?一般会有一个include文件夹,这个文件夹里面放着所有的头文件,还有lib文件夹,这个文件夹里面放着所有的库文件。

 然后把这个文件夹给对方。那么对方怎么用呢?

gcc 头文件的默认搜素目录是/usr/include

库文件搜索目录/lib64或usr/lib64

自己写的库属于第三方库,编译的时候要

gcc main.c -lhello
-l 代表链接库 去掉前缀和.a写的时候 
把头文件和库文件,拷贝到库里面这样子叫库的安装。
如果指定目录,不在对应的库目录里面需要使用I 指定头文件目录和库文件目录
gcc main -I./hello/include/ -L./hello/lib/ -hello

静态库是把代码拷贝到文件里面,一旦生成文件之后,更新之后需要重新编译

动态库.so

动态库生成的时候需要加fPIC

gcc -fPIC -c myfile.c myfile.o
fPIC :形成与位置无关的二进制目标文件

静态库是加载是时候需要拷贝到文件之中,必须在特定位置中拷贝好才能使用。而动态库则不用。readelf -S可以查看生成文件使用了那些库。

打包动态库

gcc -shared myprint.o myhello.o libhello.so
这样子可以形成动态库.so文件    

同时生成静态库和动态库

 使用-l 链接默认的是动态库还是静态库呢?当动静态库的时候默认使用动态库。如果只有静态的时候没办法只能使用静态库。那么如果强制使用静态库呢?需要加 -static。动态库在加载的时候只要建立映射关系就可以了。

但是动态库编译的时候这样子就可以了吗?不可以,gcc编译的时候明白,但是,指向的时候操作系统不知道。那么在运行动态库的时候需要

1、拷贝.so文件到系统共享库路径下, 一般指/usr/lib

2、更改LD_LIBRARY_PATH

 

[root@localhost linux]# export LD_LIBRARY_PATH=¥xxxxz自己的库目录
 [root@localhost linux]# gcc main.c -lmymath
 [root@localhost linux]# ./a.out
 add(10, 20)=30
 sub(100, 20)=80

或者修改配置文件

 一般是在 置/etc/ld.so.conf.d/ 在这个新建xxxx.conf。然后把自己想要添加的动态库目录,然后粘贴到这个配置文件里面,然后ldconfig.

为什么要写库:

大大减少软件开发周期,提高软件的健壮性,提高软件本身的质量,代码安全。有一定的加密成分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1445409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JS逆向六】(下)逆向解密某网站返回的密文的值 仅供学习

逆向日期:2024.02.07 使用工具:Node.js 文章全程已做去敏处理!!! 【需要做的可联系我】 可使用AES进行解密处理(直接解密即可):在线AES加解密工具 1、打开某某网站(请使用文章开头的…

人工智能三子棋-人机对弈-人人对弈,谁会是最终赢家?

✅作者简介:大家好我是原始豌豆,感谢支持。 🆔本文由 原始豌豆 原创 CSDN首发🐒 如需转载还请通知⚠ 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​ 📣系列专栏:C语言项目实践…

CTF--Web安全--SQL注入之Post-Union注入

一、手动POST注入实现绕过 账号密码检测 我们利用sqli-labs/Less-11靶场来进行演示: 我们可以看到一个登录页面 打开Less-11的根目录,我们打开页面的源代码(PHP实现)。 用VS-code打开文件,找到验证登录信息的代码行。 此形式的代码存在POST…

从零开始学howtoheap:fastbins的house_of_spirit攻击3

how2heap是由shellphish团队制作的堆利用教程,介绍了多种堆利用技术,后续系列实验我们就通过这个教程来学习。环境可参见从零开始配置pwn环境:从零开始配置pwn环境:从零开始配置pwn环境:优化pwn虚拟机配置支持libc等指…

《Git 简易速速上手小册》第4章:Git 与团队合作(2024 最新版)

文章目录 4.1 协作流程简介4.1.1 基础知识讲解4.1.2 重点案例:为 Python Web 应用添加新功能4.1.3 拓展案例 1:使用 CI/CD 流程自动化测试4.1.4 拓展案例 2:处理 Pull Request 中的反馈 4.2 使用 Pull Requests4.2.1 基础知识讲解4.2.2 重点案…

【Linux系统 04】OpenEuler配置

目录 一、镜像文件下载 二、配置静态IP 三、启动SSH连接 四、免密登录 五、安装常用软件 一、镜像文件下载 官方下载地址:openEuler下载 | 欧拉系统ISO镜像 | openEuler社区官网 选择一个版本,lopenEuler通常有两种版本: 创新版&…

VTK 三维场景的基本要素(相机) vtkCamera 相机的运动

相机的运动 当物体在处于静止位置时,相机可以在物体周围移动,摄取不同角度的图像 移动 移动分为相机的移动,和相机焦点的移动;移动改变了相机相对焦点的位置,离焦点更近或者更远;这样就会改变被渲染的物体…

ZigBee学习——在官方例程实现组网

✨Z-Stack版本:3.0.2 ✨IAR版本:10.10.1 ✨这篇博客是在善学坊BDB组网实验的基础上进行完善,并指出实现的过程中会出现的各种各样的问题! 善学坊教程地址: ZigBee3.0 BDB组网实验 文章目录 一、基础工程选择二、可能遇…

耳机壳UV树脂制作耳机壳的工艺流程是什么?

使用耳机壳UV树脂制作耳机壳的工艺流程如下: 获取耳模:首先,需要获取用户的耳模。这通常是通过使用一种柔软的材料注入到用户的耳朵中,然后取出并用来制作耳机的内芯。选择UV树脂:接下来,需要选择合适的UV…

小游戏和GUI编程(6) | 基于 SFML 的井字棋

小游戏和GUI编程(6) | 基于 SFML 的井字棋 0. 简介 使用 SFML 实现井字棋(tic-tac-toe), 规划如下: 了解规则, 使用命令行实现(已经实现了)使用 SFML,提供极简的交互(预计 1 小时)制作 SVG 图像, 美化界面(预计 1 小时) 1. 基于命令行的实…

160基于matlab的负熵和峭度信号的盲分离

基于matlab的负熵和峭度信号的盲分离。基于峭度的FastICA算法的收敛速度要快,迭代次数比基于负熵的FastICA算法少四倍以上。SMSE随信噪比增大两种判据下的FastICA算法都逐渐变小,但是基于峭度的算法的SMSE更小,因此基于峭度的FastICA算法性能…

Spark MLlib

目录 一、Spark MLlib简介 (一)什么是机器学习 (二)基于大数据的机器学习 (三)Spark机器学习库MLlib 二、机器学习流水线 (一)机器学习流水线概念 (二&#xff09…

车载电子电器架构 —— 电子电气系统控制器开发体系

车载电子电器架构 —— 电子电气系统控制器开发 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费…

idea:如何连接数据库

1、在idea中打开database: 2、点击 ‘’ ---> Data Source ---> MySQL 3、输入自己的账号和密码其他空白处可以不填,用户和密码可以在自己的mysql数据库中查看 4、最后选择自己需要用的数据库,点击运用ok,等待刷新即可 最后&#xff1a…

《CSS 简易速速上手小册》第9章:CSS 最佳实践(2024 最新版)

文章目录 9.1 维护大型项目的 CSS9.1.1 基础知识9.1.2 重点案例:构建一个可复用的 UI 组件库9.1.3 拓展案例 1:优化现有项目的 CSS 结构9.1.4 拓展案例 2:实现主题切换功能 9.2 BEM、OOCSS 和 SMACSS 方法论9.2.1 基础知识9.2.2 重点案例&…

【从Python基础到深度学习】3. Winscp与Ubuntu使用及配置

一、Ubuntu的使用 1.1 开启与关闭 1.2 修改Ubuntu分辨率 选择适合自己电脑大小的分辨率 1.3 Ubuntu终端 1.4 网络测试 终端中输入: ping www.baidu.com ctr C 退出ping命令 1.5 下载软件 连通安装源 sudo apt update 安装 ssh vim sudo apt install ss…

零基础学python之高级编程(2)---面向对象编程组合用法及其继承特性

面向对象编程组合用法及其继承特性 文章目录 面向对象编程组合用法及其继承特性前言一、面向对象编程组合用法1 直接在类中创建实例化对象2 给入参数,在结尾给一个类实例化传参变成对象,然后再在另一个类中传入对象参数 二、面向对象编程----继承1.继承定…

浅谈人工智能之深度学习~

目录 前言:深度学习的进展 一:深度学习的基本原理和算法 二:深度学习的应用实例 三:深度学习的挑战和未来发展方向 四:深度学习与机器学习的关系 五:深度学习与人类的智能交互 悟已往之不谏&#xff0…

2023年智能可穿戴行业市场分析(电商数据查询分析):智能手表销额增长21%,手环明显下滑

近年来,随着技术的进步,智能可穿戴设备在社交网络、医疗保健、导航等诸多领域有着非常广泛的应用,这为大众生活带来了诸多便利。 当前的可穿戴产品形态纷繁多样,主要包括智能手表、智能眼镜、智能手环、健康穿戴和体感控制等等&am…

Unity学习笔记(零基础到就业)|Chapter02:C#基础

Unity学习笔记(零基础到就业)|Chapter02:C#基础 前言一、复杂数据(变量)类型part01:枚举数组1.特点2.枚举(1)基本概念(2)申明枚举变量(3&#xff…