【linux网络编程】c++ 静态库

1. 介绍库文件

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

2. 制作静态库

2.1 静态库命名规则:
  • Linux 下 :libxxx.a
    lib : 固定前缀
    xxx : 库名称
    .a :固定后缀

  • Windows 下 :libxxx.lib

2.2 静态库的制作:
  • 先将想要打包成静态库的函数或者类文件(.c 或 .cpp)通过 gcc -c 编译为 .o 文件
    在这里插入图片描述

  • 再使用 linux 系统自带的 ar 工具(archive)将 .o 文件打包为 libxxx.a 文件

ar rcs libcalc.a add.o div.o sub.o mult.o
r - 将文件插入备存文件中
c - 建立备存文件
s - 索引

在这里插入图片描述

3. 使用静态库

3.1 工程目录如下图所示,计划将 main.c 编译成可执行文件,main.c 需调用到 head.h 头文件,并通过 head.h 头文件访问到 libcalc.a 静态库内封装好的函数。

在这里插入图片描述

/*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;
}

/*head.h*/
#ifndef _HEAD_H
#define _HEAD_H
// 加法
int add(int a, int b);
// 减法
int subtract(int a, int b);
// 乘法
int multiply(int a, int b);
// 除法
double divide(int a, int b);
#endif

3.2 使用如下命令进行编译操作:
gcc main.c -o app -I ./include/ -l calc -L ./lib
-o 将 main.c 程序直接编译成 app 可执行文件
-I 指定 include 包含文件的搜索目录,后面的路径是 main.c 程序需要索引到的 head.h 文件路径
-l 在程序编译的时候,指定使用的库( calc 是 libcalc.a 的名称)
-L 指定编译的时候,搜索的库的路径
3.3 生成 main.c 的可执行文件 app,./app 运行可得到结果,静态库已在编译过程中被复制到 app 中

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值