CMake学习(二) —— 生成链接库

2023-05-16

除使用 add_executable 生成可执行文件外,还可以使用 add_library 生成链接库。

一、Linux的链接库

首先讲一下 linux 的链接库,就是一些函数代码的二进制形式,有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。

静态链接库 .a
文件的命名方式:“libxxx.a”,库名前加“lib”,后缀是“.a”,库名是“xxx”。
静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。
当要使用时,链接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。

动态链接库(共享库)
文件命名方式:“libxxx.so”,库名前加“lib”,后缀是“.so”,库名是“xxx”。
动态库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。
某个程序在运行中要调用某个动态链接库函数的时候,操作系统首先会查看所有正在运行的程序,看在内存里是否已有此库函数的拷贝了。如果有,则让其共享那一个拷贝;只有没有才链接载入。在程序运行的时候,被调用的动态链接库函数被安置在内存的某个地方,所有调用它的程序将指向这个代码段。因此,这些代码必须使用相对地址,而不是绝对地址。在编译的时候,我们需要告诉编译器,这些对象文件是用来做动态链接库的,所以要用地址无关代码(Position Independent Code (PIC))。

动态链接库的加载方式有两种:隐式加载和显示加载。

注意:linux下进行连接的缺省操作是首先连接动态库,也就是说,如果同时存在静态和动态库,不特别指定的话,将与动态库相连接。

二、创建链接库

add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            [source1] [source2 ...])
  • name 创建的链接库的名称,在项目中必须是全局唯一的。
  • STATIC、SHARED或MODULE可以指定要创建的库的类型。 STATIC代表静态链接库。 SHARED代表动态链接库。 MODULE库是未链接到其他目标的插件,但可以使用类似dlopen的功能在运行时动态加载。
  • EXCLUDE_FROM_ALL如果给出,将在创建的目标上设置相应的属性。请参阅EXCLUDE_FROM_ALL
  • source 创建链接库所依赖的源文件。

三、一个例子:

hello.c

#include <stdio.h>

int hello()
{
    printf("hello CMake!\n");

    return 0;
}

CMakeLists.txt

# CMake最低版本要求
cmake_minimum_required(VERSION 3.5)

# 项目名称
project(test_3)

# 指定生成目标 
add_executable(test_3 main.c)

# 生成可执行文件
# 这里直接写库名称 test_2 就可以,CMake 会自动添加前缀 lib 和后缀 .a
add_library(test_2 STATIC hello.c)

编译后的结果:(编译方法同CMake学习(一)—— 最简单的CMakeLists.txt)
在这里插入图片描述
libtest_2.a即生成的静态链接库。

参考:
https://www.cnblogs.com/inrgihc/articles/7909346.html
https://blog.csdn.net/sinat_34684122/article/details/81673605

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMake学习(二) —— 生成链接库 的相关文章

  • 在ros2 foxy安装镭神M10激光雷达

    前言 记录ros2 机器人开发历程 xff0c 全当做个笔记 xff0c 以后用到好查找 xff0c 也给后来者留下一些脚印 提示 xff1a 以下是本篇文章正文内容 xff0c 下面案例可供参考 一 环境 环境 xff1a ubuntu
  • Authentication认证和Authorization授权的作用

    认证 Authentication xff1a 你是谁 授权 Authorization xff1a 你有权限干什么 认证意味着确认自己的身份 xff0c 而授权意味着授予对系统的访问权限 简单来说 xff0c 认证是验证身份的过程 xff
  • 51单片机串口通信的原理及使用方法(附串口收发数据例程代码)

    温馨提示 xff1a 本篇文章详细介绍了串口的原理及使用方法 xff0c 涉及的内容较多 xff0c 但也较为全面 xff0c 学者若想充分掌握串口通信的原理和具体使用方法 xff08 部分限于51单片机 xff09 xff0c 请静下心来
  • RoboMaster大疆开发板C型入门学习(1)配置加流水灯(循环亮灯

    cubeMX新建工程 xff0c 这里我们假设已经安装好了cubeMX 我们本次使用Clion进行相关操作 在这里我们使用STM32F407IGHx芯片 在System Core下选择RCC选项 xff0c 在RCC mode and Co
  • 如何使用cvx工具箱求解凸优化问题呢?

    以下是一个简单的MATLAB求解凸优化问题的案例 xff0c 使用cvx 工具箱求解 xff1a 1 导入cvx工具箱 addpath 39 cvx 39 2 定义问题 n 61 2 变量数量 x 61 sym 39 x 39 n 1 定义
  • 基于stm32单片机智能导盲拐杖源程序Proteus仿真设计

    功能介绍 xff1a 采用stm32单片机作为主控CPU xff0c 采用srf05超声波模块测量障碍物距离 xff0c LCD1602显示屏显示当前的障碍物距离 xff0c 通过传感器测量障碍物的距离的远近来进行相关报警 xff0c 距离
  • virtualbox上安装ubuntu20.04清华源镜像

    一 下载Ubuntu镜像文件 这里我选择国内清华源下载ubuntu镜像文件 步骤一 xff1a 清华源下载地址 xff1a Index of ubuntu releases 20 04 清华大学开源软件镜像站 Tsinghua Open S
  • 计算机视觉(一):初识OpenCV,更好更快掌握OpenCV

    计算机视觉 xff08 一 xff09 xff1a 初识OpenCV 近几个月 xff0c 也是一直在寻找自己以后的方向 xff0c 一直在迷茫中 xff0c 但也在不断得探索着 觉得自己最感兴趣的还是计算机技术这一块 xff0c 尤其是计
  • 虚拟机扩容(超详细实测好用步骤)

    第一步 xff1a 把虚拟机关机 第二步 xff1a 点击编辑虚拟机设置 xff0c 选择硬盘 xff0c 点击扩展 xff0c 如下图 xff1a 第三步 xff1a 输入你现在想要的磁盘大小 xff08 如果你原来是200G xff0c
  • 结构体的对齐规则(结构体的计算)

    1 第一个成员在与结构体变量偏移量为0的地址处 2 其他成员变量要对齐到某个数字 xff08 对齐数 xff09 的整数倍的地址处 对齐数 61 编译器默认的一个对齐数 与 该成员大小的较小值 3 结构体总大小为最大对齐数 xff08 每个
  • hostapd 配置项解析

    hostapd 配置项解析 1 interface2 wps state3 hw mode4 channel5 beacon int6 max num sta 1 interface 一般默认interface 61 wlan0 注 xff
  • 滑动窗口算法总结

    算法目的 滑动窗口法 xff0c 也叫尺取法 xff08 可能也不一定相等 xff0c 大概就是这样 61 61 xff09 xff0c 可以用来解决一些查找满足一定条件的连续区间的性质 xff08 长度等 xff09 的问题 由于区间连续
  • linux软链接的创建、删除和更新

    大家都知道 xff0c 有的时候 xff0c 我们为了省下空间 xff0c 都会使用链接的方式来进行引用操作 同样的 xff0c 在系统级别也有 在Windows系列中 xff0c 我们称其为快捷方式 xff0c 在Linux中我们称其为链
  • 进程、线程、多进程、多线程的优缺点和区别

    进程 xff1a 是并发执行的程序在执行过程中分配和管理资源的基本单位 xff0c 是一个动态概念 xff0c 竞争计算机系统资源的基本单位 线程 xff1a 是进程的一个执行单元 xff0c 是进程内科调度实体 比进程更小的独立运行的基本
  • Postman 汉化(Postman中文版)

    1 首先从官网下载postMan安装包 postman官网下载地址 Download Postman Get Started for Free 2 下载postMan 汉化包 app zip postman汉化包 Releases hlmd
  • UDP的客户端和服务器端的实例(VC6.0实现)

    服务器端程序 xff1a UdpServer cpp Defines the entry point for the console application include 34 stdafx h 34 include lt stdio h
  • STM32中关于串口中断的调试(不断进入发送中断的原因)

    说来惭愧 xff0c 前日在调试stm32f10系列的单片机的时候 xff0c 想做一个关于串口发送的状态机 xff0c 每隔100毫秒发送一次命令 没有用DMA xff0c 就是想单纯的使用发送中断来数据 xff0c 结果在调试的时候一直
  • Psoc Creator 入门——空工程的建立

    最近在做psoc 4000芯片的开发 xff0c 现在简单的说说怎么利用psoc creator进行开发 首先 xff0c 安装psoc creator xff0c 我使用的版本是4 0 安装过程省略 xff0c 赛普拉斯官网有下载链接 x
  • mbedtls使用openssl生成的自签名证书进行TLS实验

    目录 1 使用openssl生成自签名证书2 VS2013编译mbedtls3 mbdtls默认对证书的要求4 mbdtls测试例子详解5 运行测试程序 1 使用openssl生成自签名证书 openssl是一个安全套接字层密码库 xff0
  • IIC的通信波形分析

    关于IIC xff0c 不解释它的历史了 xff0c 有兴趣自己去百度看看 xff0c 本文的图片是由周立功的LAB6021逻辑分析仪抓取的 xff0c 通信的波形是抓取的cypress的psoc 4000芯片得到的 最近项目需要用到触摸I

随机推荐

  • linux下的CSV文件操作

    先介绍一下什么是csv文件 xff0c 这是一种简单的文本文件 xff0c 也被称为逗号分隔值文件 主要是用于存储简单的数据 xff0c 下面在weindows下用UE简单生成一下文件 然后用excel打开 这就是一个简单的csv文件 xf
  • GNU makefile入门——刚开坑,没有干货

    一个完整的makefile文件包含5个部分的内容 xff1a 显示规则 xff0c 隐含规则 xff0c 变量和指示符 xff0c 注释 显示规则 xff1a 包括目标 xff1a 依赖规则 命令 隐含规则 xff1a make根据目标文件
  • Renesas CS+ for ca cx入门(一)

    这是一篇关于Renesas的CS 43 for ca xff08 以下简称CA xff09 的入门简介 xff0c 在网上关于这个IDE的使用方法比较少人讲述 xff0c 兴许使用的人比较少吧 另一个类似的IDE是CS 43 for cc
  • 单片机——按键扫描

    按键扫描 xff0c 我想应该是比较简单的单片机应用了 xff0c 但是有时候看起来简单的东西反而不好写 本文拿大部分人觉得简单的按键扫描聊聊我工作至今对于软件结构的理解 嗯 xff0c 对的 xff0c 是结构 xff0c 不是架构 xf
  • keil的错误: Error: Encountered an improper argument 的解决方法

    将附件中的文件下载然后放到keil一下的安装目录中即可C Keil v5 UV4 xff0c 选择替换即可 文件链接 xff1a http download csdn net download ma57457 10118005 官方说的是支
  • 嵌入式软件没有层次感的原因

    因为软件是一个人写的 xff01 xff01 xff01
  • 博客网站转移

    我的博客会慢慢的转移到新的网站上 xff0c 新的地址为oopsrtos com xff0c 新博客会对arm 体系结果做更深入的探讨 xff0c 主要是关于实时操作系统内核开发的研究 最近在研究FPU xff0c 从内核层解释在操作系统中
  • keil工程中找不到头文件的可能原因

    今天用keil写一个串口调试程序 xff0c 编译工程时 xff0c 总是找不到type h头文件 xff0c 而该文件又是必须的 于是 xff0c 重新看设置 xff0c 头文件路径已经包含到工程里了 xff0c 头文件也已经添加到工程里
  • 在NAND FLASH上建立YAFFS2文件系统

    在NAND FLASH上建立YAFFS2文件系统 xff08 一 xff09 By on 2006 07 22 经过了半个多月的努力 xff0c 终于搞定nandflash的mtd驱动和上层的yaffs2文件系统 这半个多月来几乎每天都要和
  • 个人学习笔记-矩阵的四则运算

    目录 1 矩阵的四则运算1 1 矩阵的乘法运算1 2矩阵的加法运算1 3矩阵的减法运算 2 接口测试输出结果 1 矩阵的四则运算 1 1 矩阵的乘法运算 span class token comment 矩阵乘法 C语言实现分解步骤 xff
  • 单片机通信接口:UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB

    参考资料 xff1a 这些单片机接口 xff0c 一定要熟悉 xff1a UART I2C SPI TTL RS232 RS422 RS485 CAN USB SD卡 秒懂所有USB接口类型 xff0c USB接口大全 1 UART UAR
  • PCB中走线与电流的关系

    参考资料 xff1a 超强整理 xff01 PCB设计之电流与线宽有八种关系 1 前言 PCB的载流能力取决与以下因素 xff1a 线宽 线厚 xff08 铜箔厚度 xff09 容许温升 PCB走线越宽 xff0c 载流能力越大 但走线宽度
  • Visual Studio各版本集成的Visual C++版本对应关系

    Visual Studio版本集成的Visual C 43 43 版本对应关系如下 xff1a Visual Studio 6 xff1a vc6 Visual Studio 2003 xff1a vc7 Visual Studio 200
  • 字节序—字节内部的位序

    Big endian machine It thinks the first byte it reads is the biggest Little endian machine It thinks the first byte it re
  • 嵌入式常用模块之——环形队列(1)

    简单聊聊对我实现方式的介绍代码部分完整代码 简单聊聊 在嵌入式开发时候 xff0c 有很对模块是经常会使用到的 从这篇文字开始 xff0c 将我觉得一些常用的模块逐一做一个整理 梳理一下自己的思路 xff0c 也顺便方便大家 xff0c 如
  • Python实现isbn查询书籍详细信息

    如有错误 xff0c 请疯狂打脸没关系 xff0c 希望能够指出来 0 开始的开始 一直想做一个图书漂流软件 xff0c 最近入手 xff08 入坑 xff09 了微信小程序 xff0c 添加图书时需要用到isbn查询书籍信息的API xf
  • Ubuntu 安装 ROS 详细教程

    最近需要用ROS控制一个小车底盘 xff0c 然后发现不会了 所以写一篇博客记录一下 xff0c 以便以后查阅 OS xff1a Ubuntu 20 04 ROS xff1a noetic 1 设置Ubuntu的软件和更新 在搜索框输入so
  • roscore报错: ‘ascii’ codec can’t decode byte 0xe6 in position 13: ordinal not in range(128)

    零 问题描述 使用ROS是 xff0c 执行roscore报一下错误 xff1a ascii codec can t decode byte 0xe6 in position 13 ordinal not in range 128 The
  • Ubuntu16.04网络连接正常但浏览器无网络

    ubuntu xff0c google浏览器突然不能上网了 xff0c 经过一番折腾 xff0c 终于解决了问题 xff0c 在此记录一下 开始如下图 xff1a 然而 ping 一下百度 xff0c 是可以 ping 通的 xff0c 说
  • CMake学习(二) —— 生成链接库

    除使用 add executable 生成可执行文件外 xff0c 还可以使用 add library 生成链接库 一 Linux的链接库 首先讲一下 linux 的链接库 xff0c 就是一些函数代码的二进制形式 xff0c 有动态与静态