IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> gcc生成静态库和动态库及使用 -> 正文阅读

[C++知识库]gcc生成静态库和动态库及使用

目录

一、静态库与动态库的认识

二、生成静态库和动态库

1、编写程序

?2、生成静态库

?3、生成动态库

?三、使用静态库和动态库生成可执行文件

1、使用静态库生成可执行文件

?2、使用动态库生成可执行文件

?四、静态库与动态库生成的文件大小比较


一、静态库与动态库的认识

? 函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程 序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。

? ?静态库和动态库的不同点在于代码载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积较大 。共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。在Linux系统中,可以用ldd命令查看一个可执行程序依赖的共享库。

二、生成静态库和动态库

1、编写程序

? 在虚拟机中编写程序,保存在home目录下。

?1)程序sub1.c,用于计算b除以a的结果:

#include "sub.h"
float x2x(int a,int b)
{
  float ans;
  ans=(float)b/a;
  return ans;
}

?

2)程序sub2.c,用于计算b减a的结果:

#include"sub.h"
int x2y(int x,int y)
{
  int m;
  m=y-x;
  return m;
}

?

?

3)头文件?sub.h

#include <stdio.h>
float x2x(int a,int b);
int x2y(int x,int y);

?

4)主函数main1.c,输出两个函数执行后的结果:

#include "sub.h"
  
int main()
{
        int a=2,b=10;
        printf("相除结果为:%.2f\n",x2x(a,b));  //调用函数x2x,实现计算 b%a 并保留2位小数
   	    printf("相减结果为:%d\n",x2y(a,b));  //调用函数x2y,实现计算b-a
        return 0;
}

?

?2、生成静态库

1)将文件sub1.c与sub2.c编译生成目标文件。

gcc -c sub1.c sub2.c

? ? 可以看到已经生成目标文件.o:

?2)生成静态库:

静态库文件名的命名规范是以 lib 为前缀,紧接着跟静态库名,创建静态库用 ar 命令。

ar -crv libsub.a sub1.o sub2.o

?3、生成动态库

动态库文件名命名规范和静态库文件名命名规范类似,也是在动态库名增加前缀 lib,但其 文件扩展名为.so。用 命令gcc 来创建动态库。

gcc -shared -fPIC -o libsub.so sub1.o sub2.o

?三、使用静态库和动态库生成可执行文件

1、使用静态库生成可执行文件

gcc main1.c libsub.a -o main1.a

?此步可以生成可执行文件main1.a

?执行文件,输出结果:

./main1.a

?2、使用动态库生成可执行文件

gcc main1.c libsub.so -o main1.so

?程序在运行时, 会在/usr/lib 和/lib 等目录中查找需要的动态库文件。若找到,则载入动态库,否则将提示类似上述错误而终止程序运行。因此我们需要将文件 libsub.so 复制到目录/usr/lib 中。

mv libsub.so /usr/lib

?之后执行文件,输出结果:

?四、静态库与动态库生成的文件大小比较

使用语句查看内存空间

ls -l

可以看到main1.a的大小为7436,main1.so的大小为7400。?

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-13 11:17:51  更:2021-10-13 11:18:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:56:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码