当前位置: 首页 > news >正文

记录 | linux静态库和动态库的理解

hello.cpp

#include <cstdio>void hello() {printf("Hello, world!\n");
}

main.cpp

#include <cstdio>void hello();int main() {hello();return 0;
}

静态库编译配置:

cmake_minimum_required(VERSION 3.12)
project(hellocmake LANGUAGES CXX)add_library(hellolib STATIC hello.cpp)
add_executable(a.out main.cpp)
target_link_libraries(a.out PUBLIC hellolib)

动态库编译配置:

cmake_minimum_required(VERSION 3.12)
project(hellocmake LANGUAGES CXX)add_library(hellolib SHARED hello.cpp)
add_executable(a.out main.cpp)
target_link_libraries(a.out PUBLIC hellolib)

编译:

cmake -B buildcd build 
make

在这里插入图片描述
反汇编:

objdump -d a.out | less

在这里插入图片描述
可以看到静态库编译是把实现写在了可执行程序里面了,而动态库编译是跳转到了动态库,所以执行的时候,如果是静态库编译,则可以抛开.a;而动态库编译的话,就必须要链接动态库。

所以也是为什么静态库编译的执行程序会比动态库编译的要大的原因了

http://www.lryc.cn/news/253903.html

相关文章:

  • ParBFT: Faster Asynchronous BFT Consensus with a Parallel Optimistic Path
  • java小工具util系列3:JSON转实体类对象工具
  • MySQL:找回root密码
  • 计算机网络扫盲(1)——因特网
  • C语言 if语句有无(;)分号问题
  • Python-列表详解(列表的创建、用法、遍历、注意事项、特点等)
  • 【langchain实战】开源项目-RasaGPT
  • 在线yml和properties相互转换
  • 数据收集与处理(爬虫技术)
  • C# 雪花算法生成Id工具类
  • 什么是通配符证书?
  • 西南科技大学模拟电子技术实验五(集成运算放大器的应用设计)预习报告
  • LeetCode 每日一题 Day 4
  • 服务器数据恢复—重装系统导致XFS文件系统分区丢失的数据恢复案例
  • Scala 从入门到精通
  • 华为OD机试 - 九宫格按键输入 - 逻辑分析(Java 2023 B卷 200分)
  • leetcode:225. 用队列实现栈
  • Centos7安装GItLab(在线版)
  • Linux入门笔记
  • nvm for windows使用与node/npm/yarn的配置
  • 打工人副业变现秘籍,某多/某手变现底层引擎-StableDiffusionWebUI界面基本布局和操作
  • 01、pytest:帮助你编写更好的程序
  • C语言--每日选择题--Day37
  • Android 12 及以上授权精确位置和模糊位置
  • scp 指令详细介绍
  • 构建第一个事件驱动型 Serverless 应用
  • 特征与特征图的区别
  • Linux学习笔记之七(shell脚本的基本语法)
  • PySpark开发环境搭建常见问题及解决
  • supervisor管理启动重启,Java,Go程序Demo