基于linux下的高并发服务器开发(第一章)- 静态库的制作1.4

news2024/12/24 21:26:24

 01 / 什么是库

  • 库文件是计算机上的一类文件,可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接拿来用的变量、函数或类
  • 库是特殊的一种程序,编写库的程序和编写一般的程序区别不大,只是库不能单独运行。
  • 库文件有两种,静态库和动态库(共享库)区别是:静态库在程序的链接阶段被复制倒了程序中;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。
  • 库的好处:1、代码保密 2、方便部署和分发

  02 /  静态库制作

  • 命名规则:

  •         Linux:libxxx.a

                        lib:前缀(固定)

                        xxx:库的名字,自己起

                        .a:后缀(固定)

  •         Windows:libxxx.lib

  • 静态库的制作:

  • gcc 获得的 .o 文件

  • 将 .o 文件打包,使用 ar 工具(archive)

                ar rcs libxxx.a xxx.o xxx.o

                        r - 将文件插入备存文件中

                        c - 建立备存文件

                        s - 索引

创建文件夹lesson04,创建子文件夹calc和library文件夹

在calc下新建add.c,div.c,mult.c,head.h,main.c,sub.c

add.c

#include <stdio.h>
#include "head.h"

int add(int a,int b){
    return a+b;
}

div.c

#include <stdio.h>
#include "head.h"

double divide(int a,int b){
    return (double)a/b;
}

mult.c

#include <stdio.h>
#include "head.h"

int multiply(int a,int b){
    return a*b;
}

sub.c

#include <stdio.h>
#include "head.h"

int subtract(int a,int b){
    return a-b;
}

main.c

#include <stdio.h>
#include "head.h"

int main(){
    int a = 20;
    int b = 12;
    printf("a = %d,b = %d\n",a,b);
    printf("a + b = %d\n",add(a,b));
    printf("a - b = %d\n",subtract(a,b));
    printf("a * b = %d\n",multiply(a,b));
    printf("a / b = %f\n",divide(a,b));
    return 0;
}

在XShell中安装tree,sudo apt install tree,可以用tree来查看当前路径下的文件

gcc -c add.c div.c mult.c sub.c,生成add.o div.o mult.o sub.o

ar rcs libcalc.a add.o sub.o mult.o div.o,生成libcalc.a

 

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

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

相关文章

如何选择适合外贸公司的企业邮箱?推荐哪些优质企业邮箱服务?

为外贸公司选择合适的企业邮箱是企业成功经营的关键。强大、安全、直观的企业邮箱能够满足不同平台上不同用户的需求&#xff0c;这是确保数据和消息与客户和合作伙伴准确沟通的关键。以下是外贸公司在选择企业邮箱时应考虑的一些规范: 1、安全 在考虑企业邮箱时&#xff0c;安…

如何下载centOS镜像

我们在操作虚拟机的时候都有一个选择镜像&#xff0c; 这里我们可以去对应的官网去下载即可&#xff0c;下面就是网址 Download (centos.org) 就会出现许多地址 我们只需要随便选一个地址即可&#xff08;前提它能用&#xff09;&#xff0c; 到了下图即可点击下载&#xff0c;…

通信算法之179: 单载波频域均衡系统的帧结构2

一。帧结构 &#xff08;2&#xff09; &#xff08;3&#xff09;

问懵了....美团一面索命44问,过了就60W+

说在前面 在40岁老架构师尼恩的&#xff08;50&#xff09;读者社区中&#xff0c;经常有小伙伴&#xff0c;需要面试美团、京东、阿里、 百度、头条等大厂。 下面是一个小伙伴成功拿到通过了美团一次技术面试&#xff0c;最终&#xff0c;小伙伴通过后几面技术拷问、灵魂拷问…

欧姆龙CJ系列PLC以太网通讯处理器欧姆龙cp1h以太网模块

捷米特JM-ETH-CJ转以太网模块是一款经济型的以太网通讯处理器&#xff0c;是为满足日益增多的工厂设备信息化需求&#xff08;设备网络监控和生产管理&#xff09;而设计&#xff0c;用于欧姆龙CJ1/CJ2/CS1系列PLC的以太网数据采集&#xff0c;非常方便构建生产管理系统。 捷米…

Mybatis-plus生成代码

生成类 package com.lbdj.user.service;import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.lbdj.user.service.co…

K8s生产环境常见问题处理、答疑

文章目录 K8s 常见问题处理、答疑[1] calico一直处于未就绪状态[2] 删除dashboard 一直卡在delete[3] k8s-dashboard 修改tocken-ttl避免频繁输入tocken[4] kubectl 快捷指令[5] 解决UTC时间问题[6] kubectl命令自动补全[7] kubectl exec进入pod[8] 使用hostpath解决容器UTC时间…

轻松玩转Python正则表达式

引言 正则表达式是一种强大的文本匹配和处理工具&#xff0c;广泛应用于各种编程语言中。在Python中&#xff0c;我们可以使用内置的re模块来处理正则表达式。本文将带您从入门到精通&#xff0c;逐步介绍Python中的正则表达式用法&#xff0c;并提供实例演示。 1. 正则表达式…

电商兴起与电脑城衰退:利弊分析与展望

随着科技的飞速发展和互联网的普及&#xff0c;电子产品成为现代生活中不可或缺的一部分。在过去很长一段时间里&#xff0c;想要购买电子设备都逃不开一个叫“电脑城”的地方&#xff0c;那里鱼龙混杂良莠不齐&#xff0c;是令许多人记忆深刻分外难忘之处。然而&#xff0c;随…

U启动盘(NETBASE第十二课)

1.域环境组策略的应用规则 1&#xff09;策略的继承 继承&#xff1a;默认下级容器继承上级容器的组策略配置Default Domain Policy禁止更改桌面背景运行-dsa.msc创建OU并命名为caiwu&#xff0c;在caiwu的OU中创建新用户xmxm用户在win10客户端主机登录&#xff0c;验证不能更…

MongoDB比Mysql快的原因,为什么 MongoDB 索引选择B-树,而 Mysql 索引选择B+树

一、B树和B树的区别 很明显&#xff0c;我们想向弄清楚原因就要知道B树和B树的区别。为了不长篇大论。我们直接给出他们的形式总结他们的特点。 1、B树 B树是一种自平衡的搜索树&#xff0c;形式很简单&#xff1a; 这就是一颗B-树。针对我们这个问题的最核心的特点如下&#…

软件测试面试题(带答案)

1. 请自我介绍一下(需简单清楚的表述自已的基本情况&#xff0c;在这过程中要展现出自信&#xff0c;对工作有激情&#xff0c;上进&#xff0c;好学) 面试官您好&#xff0c;我叫###&#xff0c;今年26岁&#xff0c;来自广东深圳&#xff0c;就读专业是电子商务&#xff0c;…

TypeScript算法题实战——剑指 Offer篇(4)

目录 一、礼物的最大价值1.1、题目描述1.2、题解 二、最长不含重复字符的子字符串2.1、题目描述2.2、题解 三、丑数3.1、题目描述3.2、题解 四、第一个只出现一次的字符4.1、题目描述4.2、题解 五、数组中的逆序对5.1、题目描述5.2、题解 六、两个链表的第一个公共节点6.1、题目…

任务型对话对话策略学习的强化学习方法

任务型对话(TOD)系统旨在帮助用户解决从天气咨询到计划安排的一系列问题。完成任务的途径有二。 其一是端到端途径&#xff1a;直接将当前对话内容与系统的自然语言反映相关联。此种方法多是采用序列到序列的模型&#xff0c;然后进行监督训练。 第二种是模组途径&#xff1a…

can 相关背题

1 CAN FD 和CAN的 区别&#xff1a; CAN-FD&#xff1a;一帧数据最长64字节。以理解成CAN协议的升级版&#xff0c;只升级了协议&#xff0c;物理层未改变。传输速率不同、数据长度不同、帧格式不同、ID长度不同。 1&#xff09;速率不同&#xff1a; CAN&#xff1a;最大传…

机械臂的雅克比矩阵推导

1. 线速度和角速度的递推通式推导 p i p i − 1 R i − 1 r i − 1 , i i − 1 \mathbf{p}_{i}\mathbf{p}_{i-1}\mathbf{R}_{i-1} \mathbf{r}_{i-1, i}^{i-1} pi​pi−1​Ri−1​ri−1,ii−1​ p i − 1 \mathbf{p}_{i-1} pi−1​是 { i − 1 } \{i-1\} {i−1}坐标系的原点的…

获取全国各地行政区的genjson数据以及使用leaflet加载行政区数据

前言 在写代码之前&#xff0c;我们需要做一些准备工作&#xff0c;需要有一份某个行政区的geojson数据&#xff0c;如果你没有也没关系&#xff0c;我们可以去下载&#xff0c;地址&#xff1a;geojson数据下载网站 打开网站&#xff0c;选择自己想要获取的行政区&#xff0…

FPGA学习——按键控制LED流水灯(附源码 无按键消抖版本)

文章目录 一、前言二、开发板按键原理图三、源码四、实现效果 一、前言 在博主的cyclone4开发板上一共有4个按键&#xff0c;本次实验的目的是为了实现每按下一次按键&#xff0c;都会使开发板上的4个LED灯切换一次状态&#xff0c;博主一共设计了四种状态&#xff0c;分别是&…

滴水逆向三期笔记与作业——02C语言——04 IF语句逆向分析下

OneNote防丢失。 海哥牛逼。 目录 一、if…else...反汇编1、反汇编特点2、案例分析 二、作业1三、IF...ELSE IF...ELSE IF..多分支语句1、多分支反汇编2、案例分析 四、作业2 一、if…else…反汇编 1、反汇编特点 2、案例分析 二、作业1 解&#xff1a; 分析图&#xff1a; 分…