【CMake入门】第四节——静态库和共享库及安装、使用库的流程

2023-12-08 05:52

本文主要是介绍【CMake入门】第四节——静态库和共享库及安装、使用库的流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章:
【CMake入门】第一节——CMake的安装与简单样例
【CMake入门】第二节——CMake常用指令介绍
【CMake入门】第三节——构建项目并调用或生成库

静态库与共享库

静态库

  • 原理:在编译时将源代码复制到程序中,运行时不用库文件依旧可以运行
  • 优点:运行已有代码,运行时不再用库;无需加载库,运行更快
  • 缺点:占用更多的空间和磁盘;静态库升级,需要重新编译程序

共享库

  • 原理:编译时仅仅是记录用哪一个库里面的哪一个符号,不复制相关代码
  • 优点:不复制代码,占用空间小;多个程序可以同时调用一个库;升级方便,无需重新编译
  • 缺点:程序运行需要加载库,耗费一定时间
系统静态库共享库
Windowslib.dll
Linux.a.so
Mac OS.adylib

安装库的流程

以Pangolin为例:

$ git clone https://github.com/stevenlovegrove/Pangolin.git
$ cd Pangolin
$ mkdir build
$ cd build
$ cmake
$ make -j4 #-j后面的数字表示make过程使用的cpu线程数,数字越大,速度越快,根据自己的电脑配置自行调整
$ sudo make install
$ #或者
$ #cmake ..
$ #make install #默认安装在/usr/bin
$ #make clean #可对构建结果进行清理

使用库的流程

当编译一个需要使用第三方库的软件时,我们需要知道:

  • 去哪找头文件 .h
  • 去哪找库文件 (.so/.dll/.lib/.dylib/…)
  • 需要连接的库文件的名字

例如:需要第三方库curl,若不使用find命令,CMakeLists.txt需要指定头文件目录和库文件:

include_directiories(/usr/include/curl)
target_link_libraries(myprogram yourpath/curl.so)

若使用cmake的Module目录下的FindCURL.cmake,则CMakeLists.txt如下:

find_package(CURL REQUIRED)
include_directiories(${CURL_INCLUDE_DIR})
target_link_libraries(myprogram ${CURL_LIBRARY})

这篇关于【CMake入门】第四节——静态库和共享库及安装、使用库的流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/468740

相关文章

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

如何使用Spring boot的@Transactional进行事务管理

《如何使用Springboot的@Transactional进行事务管理》这篇文章介绍了SpringBoot中使用@Transactional注解进行声明式事务管理的详细信息,包括基本用法、核心配置... 目录一、前置条件二、基本用法1. 在方法上添加注解2. 在类上添加注解三、核心配置参数1. 传播行为(

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

c++中std::placeholders的使用方法

《c++中std::placeholders的使用方法》std::placeholders是C++标准库中的一个工具,用于在函数对象绑定时创建占位符,本文就来详细的介绍一下,具有一定的参考价值,感兴... 目录1. 基本概念2. 使用场景3. 示例示例 1:部分参数绑定示例 2:参数重排序4. 注意事项5.

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

一文教你使用Python实现本地分页

《一文教你使用Python实现本地分页》这篇文章主要为大家详细介绍了Python如何实现本地分页的算法,主要针对二级数据结构,文中的示例代码简洁易懂,有需要的小伙伴可以了解下... 在项目开发的过程中,遇到分页的第一页就展示大量的数据,导致前端列表加载展示的速度慢,所以需要在本地加入分页处理,把所有数据先放

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具