(GCC) 库的操作

news2025/2/11 9:18:34

文章目录

  • 预备
  • 静态库
    • 生成
    • 链接
    • 环境区别
  • 动态库
    • 生成
    • 链接
    • 环境区别
  • END
    • 参考
    • ar指令

预备

准备两个文件,以最简单的形式进行展示。

add.c

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

main.c

为了方便直接在头文件中声明函数

#include <stdio.h>

extern int add(int, int);

int main() {
    int x = 1;
    int y = 2;
    printf("%d + %d = %d\n", x, y, add(x, y));
}

静态库

生成

生成object文件

gcc -c add.c

生成库

采用ar指令进行生成静态库,其中三个参数的含义为:

ar的参数
参数c创建一个库,不管库是否存在,都将创建。
参数s创建一个库,不管库是否存在,都将创建。
参数r在库中插入模块(替换)。默认新的成员添加在库的结尾处,如果模块名已经在库中存在,则替换同名的模块。
ar rcs libadd.a add.o

img

链接

链接操作静动态库一致

  • -L 库的路径
  • -l 库的名称,去掉前后缀
  • 指定参数间的空格可有可无
gcc main.c -L . -l add

环境区别

经过测试,windows下为libxxx.a也可以

环境常用命名
Linuxlibxxx.a
Windowslibxxx.lib

动态库

生成

生成object文件

需要添加-fpic参数

gcc -c -fpic add.c

生成库

生成一个动态库,有可执行权限

不指定-o的话默认是a.exe/a.out

gcc -shared add.o -o libadd.dll

img

链接

链接操作静动态库一致

  • -L 库的路径
  • -l 库的名称,去掉前后缀
  • 指定参数间的空格可有可无
gcc main.c -L . -l add

环境区别

环境常用命名
Linuxlibxxx.so
Windowslibxxx.dll

END

参考

Linux 静态库和动态库 | 爱编程的大丙 (subingwen.cn)

侵删

ar指令

Usage: ar [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...
       ar -M [<mri-script]
 commands:
  d            - delete file(s) from the archive
  m[ab]        - move file(s) in the archive
  p            - print file(s) found in the archive
  q[f]         - quick append file(s) to the archive
  r[ab][f][u]  - replace existing or insert new file(s) into the archive
  s            - act as ranlib
  t[O][v]      - display contents of the archive
  x[o]         - extract file(s) from the archive
 command specific modifiers:
  [a]          - put file(s) after [member-name]
  [b]          - put file(s) before [member-name] (same as [i])
  [D]          - use zero for timestamps and uids/gids (default)
  [U]          - use actual timestamps and uids/gids
  [N]          - use instance [count] of name
  [f]          - truncate inserted file names
  [P]          - use full path names when matching
  [o]          - preserve original dates
  [O]          - display offsets of files in the archive
  [u]          - only replace files that are newer than current archive contents
 generic modifiers:
  [c]          - do not warn if the library had to be created
  [s]          - create an archive index (cf. ranlib)
  [l <text> ]  - specify the dependencies of this library
  [S]          - do not build a symbol table
  [T]          - deprecated, use --thin instead
  [v]          - be verbose
  [V]          - display the version number
  @<file>      - read options from <file>
  --target=BFDNAME - specify the target object format as BFDNAME
  --output=DIRNAME - specify the output directory for extraction operations
  --record-libdeps=<text> - specify the dependencies of this library
  --thin       - make a thin archive
 optional:
  --plugin <p> - load the specified plugin
 emulation options: 
  No emulation specific options
ar: supported targets: elf64-x86-64 elf32-i386 elf32-iamcu elf32-x86-64 pei-i386 pe-x86-64 pei-x86-64 elf64-l1om elf64-k1om elf64-little elf64-big elf32-little elf32-big pe-bigobj-x86-64 pe-i386 srec symbolsrec verilog tekhex binary ihex plugin
Report bugs to <https://sourceware.org/bugzilla/>

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

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

相关文章

Python电能质量扰动信号分类(三)基于Transformer的一维信号分类模型

目录 引言 1 数据集制作与加载 1.1 导入数据 1.2 制作数据集 2 Transformer分类模型和超参数选取 2.1 定义Transformer分类模型 2.2 定义模型参数 3 Transformer模型训练与评估 3.1 模型训练 3.2 模型评估 代码、数据如下&#xff1a; 往期精彩内容&#xff1a; 电…

Leetcode—86.分隔链表【中等】

2023每日刷题&#xff08;六十九&#xff09; Leetcode—86.分隔链表 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* partition(struct ListNode* head, int x) {struct ListNode…

实验室安全教育考试管理系统v3.0功能介绍

瑞熙贝通实验室安全练习和在线考试系统&#xff0c;采取线上培训学习与安全考试相结合的教学形式&#xff0c;在学生进入开放实验室之前通过系统对实验的安全与规范有一个系统的认识与学习。通过线上考试系统&#xff0c;为评价学生的实验室安全学习效果提供了快速有效的实验平…

【bug】uniapp一键登录,自定义协议条款是否支持内部路由?

uniapp一键登录的自定义协议条款&#xff0c;不支持内部路由跳转 在uniapp文档上搜一键登录 加二维码之后可以提问

动态内存管理(补)

1.内核空间的代码为操作系统 2.栈区&#xff1a;函数内局部变量在栈区上创建&#xff0c;执行结束后其所占空间被自动释放&#xff0c;栈区的内存运算内置于处理器的指令集中&#xff0c;效率高&#xff0c;但容量有限。栈区主要存放函数的局部变量&#xff0c;函数参数&#…

Windows系统配置pytorch环境,Jupyter notebook编辑器安装使用(深度学习本地篇)

如今现在好一点的笔记本都自带英伟达独立显卡&#xff0c;对于一些简单的深度学习项目&#xff0c;是不需要连接服务器的&#xff0c;甚至数据量不大的话&#xff0c;cpu也足够进行训练学习。我把电脑上一些以前的笔记整理一下&#xff0c;记录起来&#xff0c;方便自己35岁事业…

12/25 分析算法时间复杂度的基本方法

分析算法时间复杂度的基本方法&#xff1a; 若f&#xff08;n&#xff09;是m次多项式&#xff0c;则T&#xff08;n&#xff09;O&#xff08;&#xff09; 忽略所有低次幂和最高次幂的系数&#xff0c;体现出增长率的含义&#xff01; 1.找出语句频度最大的那条语句作为基本语…

Django(三)

1.快速上手 确保app已注册 【settings.py】 编写URL和视图函数对应关系 【urls.py】 编写视图函数 【views.py】 启动django项目 命令行启动python manage.py runserverPycharm启动 1.1 再写一个页面 2. templates模板

案例163:基于微信小程序的校园二手交易平台系统设计与开发

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

doris数据模型,06-Aggregate(聚合模型)

聚合模型的特点 将表中的列分为Key和Value。 Key是数据的维度列&#xff0c;比如时间&#xff0c;地区等等。key相同时会发生聚合。 Value是数据的指标列&#xff0c;比如点击量&#xff0c;花费等等。 每个指标列还会有自己的聚合函数&#xff0c;如&#xff1a;sum&#xff…

React学习计划-React16--React基础(六)路由

路由 一、版本5路由 1. react-router-dom 2. 路由的使用 1. 基础使用 安装&#xff1a;yarn add react-router-dom5明确好界面中的导航区、展示区导航区Link标签包裹 <Link to"/home">Home</Link>展示区写在Route标签进行匹配 <Route path/home …

Wi-Fi、蓝牙、ZigBee等多类型无线连接方式的安全物联网网关设计

随着物联网和云计算技术的飞速发展.物联网终端的数量越来越多&#xff0c;终端的连接方式也更趋多样化&#xff0c;比如 Wi-Fi蓝牙和 ZigBee 等。现有的物联网网关大多仅支持一种或者几种终端的接人方式。无法满足终端异构性的需求。同时&#xff0c;现有的物联网网关与终端设备…

2024 年网络安全展望:未来是什么?

为了建立强大的网络安全计划&#xff0c;组织必须首先了解整体威胁环境不断变化的性质。 人工智能在成为安全团队的帮助之前&#xff0c;将为网络犯罪分子带来巨大的福音。 网络犯罪分子和不良行为者将受益于先进人工智能工具的广泛部署&#xff0c;然后他们的目标才能建立人…

在x64上构建智能家居(home assistant) (六) 安装Node-RED Companion Integration

点击HACS 搜索node-red 右侧单击后点击安装 安装完成后, 选设备

手机蓝牙在物联网超市中的应用

超市一站式购物已进入城市的千家万户。然而人们在选购时却采用直接翻阅商品的方式&#xff0c;既不方便又不卫生甚至大大缩短食品类商品保质期&#xff0c;也给超市商品管理造成很大难度。物联网(The Internet of things)基于射频识别(RFID)、红外感应等技术&#xff0c;把物品…

路由器常见故障分析及处理方法!

对当前的大多数网络来说&#xff0c;无论是实现网络互连还是访问Internet&#xff0c;路由器是不可或缺的。 由于路由器的重要性&#xff0c;对它的管理就成了维护人员的日常工作中重要的一部分&#xff0c;而路由器的故障分析和排除也是令许多维护人员极为困扰的问题之一。 路…

助力打造清洁环境,基于轻量级YOLOv8开发构建公共场景下垃圾堆放垃圾桶溢出检测识别系统

公共社区环境生活垃圾基本上是我们每个人每天几乎都无法避免的一个问题&#xff0c;公共环境下垃圾投放点都会有固定的值班时间&#xff0c;但是考虑到实际扔垃圾的无规律性&#xff0c;往往会出现在无人值守的时段内垃圾堆放垃圾桶溢出等问题&#xff0c;有些容易扩散的垃圾比…

【AI故事】灵感的源泉还是知识的盗窃?

灵感的源泉还是知识的盗窃&#xff1f; ——ChatGPT Robot在一个漆黑的夜晚&#xff0c;年轻的作家艾米丽坐在书桌前&#xff0c;手里紧握着一支笔&#xff0c;思绪万千。她一直在寻找创作的灵感&#xff0c;但却毫无头绪。 突然&#xff0c;她听到了一声巨响&#xff0c;仿佛…

pycharm连接虚拟机

前言&#xff1a;我们默认用户已经在虚拟机上安装好了spark等相关集群和生态&#xff0c;是可以在虚拟机中运行相关的操作&#xff0c;比如mapper&#xff0c;reducer操作&#xff0c;rdd&#xff0c;dataframe等等杂七杂八的东西的(主要我也没太明白)。本人是学校老师带着装的…

基于STM32和MQ-2传感器的物联网友好型烟雾报警系统

基于STM32和MQ-2传感器的物联网友好型烟雾报警系统是一种用于检测室内烟雾并及时报警的智能设备。本系统利用STM32微控制器作为主控制单元&#xff0c;通过MQ-2传感器实时监测室内烟雾浓度&#xff0c;并通过无线通信模块将数据传输到云端服务器&#xff0c;实现远程监控和报警…