Linux C++静态库动态库以及链接方式介绍

在Linux系统中,C/C++库分为静态库和动态库两种类型。下面是它们的基础介绍:

  1. 静态库.a文件):静态库是一种归档文件,其中包含了一堆可重用的目标文件,这些目标文件通常是C/C++函数的实现。当静态库被链接到程序中时,需要的目标文件会被复制并包含在最终的可执行文件中。静态库的优点是程序运行时不需要额外的依赖,但是会导致生成的可执行文件变大。

  2. 动态库.so文件):动态库在程序运行时才被加载到内存,一个动态库可以被多个正在运行的程序共享,这样可以节省内存。如果动态库被修改,所有使用该库的程序都将受益,无需重新编译或链接。但是,使用动态库需要保证运行环境中有对应的库文件。

以下是使用CMake来创建和链接静态库和动态库的基本示例。

我们首先创建一个名为mylib的库,它有一个源文件mylib.cpp

// mylib.cpp
#include "mylib.h"int add(int a, int b) {return a + b;
}

还有一个头文件mylib.h

// mylib.h
#ifndef MYLIB_H
#define MYLIB_Hint add(int a, int b);#endif

然后,我们创建一个主程序main.cpp来使用这个库。

// main.cpp
#include "mylib.h"
#include <iostream>int main() {std::cout << "2 + 3 = " << add(2, 3) << std::endl;return 0;
}

接下来,我们创建CMakeLists.txt文件来编译和链接这些程序。

  • 静态库

    cmake_minimum_required(VERSION 3.10)
    project(MyApp)add_library(mylib STATIC mylib.cpp)add_executable(main main.cpp)
    target_link_libraries(main mylib)
    
  • 动态库

    cmake_minimum_required(VERSION 3.10)
    project(MyApp)add_library(mylib SHARED mylib.cpp)add_executable(main main.cpp)
    target_link_libraries(main mylib)
    

在以上的CMakeLists.txt文件中,add_library命令用于创建库,add_executable命令用于创建可执行程序,target_link_libraries命令用于链接库到可执行程序。STATICSHARED关键词用于指定创建静态库或动态库。

最后,我们在构建目录下运行以下命令来生成和编译项目:

cmake ..
make

以上就是在Linux系统中使用CMake创建和链接静态库和动态库的基本方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/132268.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式系统中的FPGA

举个栗子 假设你有一台智能家居系统&#xff0c;其中的FPGA可以被类比为智能家居中的中央控制器。 智能家居系统&#xff1a; 定制家居逻辑&#xff1a; 你希望智能家居系统能够根据你的生活习惯、时间表和喜好自动控制灯光、温度、窗帘等设备。就像FPGA中可以根据需求重新配置…

烟台海森大数据——数据驱动材料研发,本土化为安全护航

随着大数据时代的来临&#xff0c;人们的生产和生活&#xff0c;各方面都在发生着深刻的变化。作为与国计民生息息相关的材料行业&#xff0c;也在数据时代迎来了新的机遇与挑战。 新材料是我国重点推进的战略性新兴产业之一&#xff0c;对于支撑整个战略性新兴产业发展&#…

vue + axios + mock

参考来源&#xff1a;Vue mock.js模拟数据实现首页导航与左侧菜单功能_vue.js_AB教程网 记录步骤&#xff1a;在参考资料来源添加axios步骤 1、安装mock依赖 npm install mock -D //只在开发环境使用 下载完成后&#xff0c;项目文件package.json中的devDependencies就会加…

1.2 HTML5

一.HTML5 简介 1.什么是HTML5 HTML5是新一代的 HTML 标准&#xff0c;2014年10月由万维网联盟( W3C&#xff09;完成标准制定。官网地址: w3c提供:HTML StandardWHATWG提供: HTML Standard HTML5在狭义上是指新—代的 HTML 标准&#xff0c;在广义上是指:整个前端。 2.HTML…

数据结构(四)--队列及面试常考的算法

一、队列介绍 1、定义 与栈相似&#xff0c;队列是另一种顺序存储元素的线性数据结构。栈与队列的最大差别在于栈是LIFO&#xff08;后进先出&#xff09;&#xff0c;而队列是FIFO&#xff0c;即先进先出。 2、优缺点及使用场景 优点&#xff1a;先进先出&#xff08;FIFO&…

Qt利用VCPKG和CMake和OpenCV和Tesseract实现中英文OCR

文章目录 1. 开发平台2. 下载文件2.1 下载安装 OpenCV 库2.2 下载安装 Tesseract-OCR库2.3 下载训练好的语言包 3. CMakeLists.txt 内容4. Main.cpp4.1 中英文混合OCR 5. 在Qt Creator 中设置 CMake vcpkg5.1 在初始化配置文件里修改5.2 在构建配置里修改 说明&#xff1a;在Q…

踩坑记录一

先呼自己两耳巴 临床采集的增强CT数据&#xff0c;有时候是同时采集了静脉期和动脉期。就会导致图像多一分如下&#xff1a; 但是勾画的时候&#xff0c;是以下面的期相进行标注的。所以在训练分割&#xff0c;对于这种案例&#xff0c;他识别到了在上面一个期相的目标位置&am…

xilinx primitives(原语)

Xilinx的原语分为10类&#xff0c;包括&#xff1a;计算组件&#xff0c;IO端口组件&#xff0c;寄存器/锁存器&#xff0c;时钟组件&#xff0c;处理器组件&#xff0c;移位寄存器&#xff0c;配置和检测组件&#xff0c;RAM/ROM组件&#xff0c;Slice/CLB组件&#xff0c;G-t…

百面深度学习-循环神经网络

循环神经网络 什么是循环神经网络&#xff1f; 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一类用于处理序列数据的神经网络。你可以将它想象成一个机器&#xff0c;它不仅考虑当前的输入&#xff0c;还考虑之前接收过的输入。这使得它非…

[Linux打怪升级之路]-信号的产生

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、信号基础…

Docker Stack部署应用详解+Tomcat项目部署详细实战

Docker Stack 部署应用 概述 单机模式下&#xff0c;可以使用 Docker Compose 来编排多个服务。Docker Swarm 只能实现对单个服务的简单部署。而Docker Stack 只需对已有的 docker-compose.yml 配置文件稍加改造就可以完成 Docker 集群环境下的多服务编排。 stack是一组共享…

专访HuggingFace CTO:开源崛起、创业故事和AI民主化丨智源独家

导读 HuggingFace CTO Julien Chaumond认为&#xff0c;在大模型时代&#xff0c;AI民主化至关重要。随着大语言模型和复杂人工智能系统的崛起&#xff0c;持续提升AI技术的可及性有助于确保这些技术的获取和控制不集中在少数强大实体手中。技术民主化促进了机会均等&#xff0…

CSV是什么

CSV是逗号分隔值&#xff08;Comma-Separated Values&#xff09;的缩写&#xff0c;它是一种常见的文本文件格式&#xff0c;通常以纯文本形式存储表格数据。在CSV文件中&#xff0c;数据通常由逗号分隔&#xff0c;并且每行表示一个记录。这种格式广泛应用于电子表格和数据库…

(四) Python Pandas入门

一、介绍 Pandas是Python中一个强大的数据处理库&#xff0c;它提供了许多功能强大的数据结构和数据分析工具。在本文中&#xff0c;我们将介绍Pandas的基本概念和如何使用它生成一个包含今天到未来20个工作日的日期列表的Excel文件。 Pandas提供了大量的数据结构和数据分析工…

「Java开发指南」如何用MyEclipse搭建Spring MVC应用程序?(一)

本教程将指导开发者如何生成一个可运行的Spring MVC客户应用程序&#xff0c;该应用程序实现域模型的CRUD应用程序模式。在本教程中&#xff0c;您将学习如何&#xff1a; 从数据库表的Scaffold到现有项目部署搭建的应用程序 使用Spring MVC搭建需要MyEclipse Spring或Bling授…

工程(十二)Ubuntu20.04LSD_SLAM运行

LSD_SLAM适配于ubuntu20.04修改过程的参考连接如下 Ubuntu20.04配置并运行LSD_SLAM&#xff0c;实测可行_nice-wyh的博客-CSDN博客 【已解决】/lib/x86_64-linux-gnu/libapr-1.so.0: undefined reference to uuid_generateUUID_1.0_Mr.Winter的博客-CSDN博客 博主将修改好的…

jar包的精细化运营,Java模块化简介 | 京东云技术团队

图&#xff1a;模块化手机概念 一、什么是Java模块化 Java模块化&#xff08;module&#xff09;是Java9及以后版本引入的新特性。 官方对模块的定义为&#xff1a;一个被命名的&#xff0c;代码和数据的自描述集合。&#xff08; the module, which is a named, self-descri…

rust 开发入门

要入门Rust编程&#xff0c;首先需要安装Rust编程环境并创建一个Hello World项目。以下是步骤&#xff1a; 1. 安装Rust 首先&#xff0c;你需要安装Rust编程环境。你可以使用rustup&#xff0c;它是Rust的官方工具&#xff0c;用于安装和管理Rust的不同版本。打开终端并运行…

如何让设计作品更有张力?优漫教育

有些平面设计作品&#xff0c;让人看了提不起劲&#xff0c;更别说能达到宣传作用了。那么问题来了&#xff0c;如果让自己的设计作品更有视觉效果和更有张力&#xff0c;能让甲方满意&#xff0c;下面分享的九个大招&#xff0c;能提升你的设计水平。 如何让设计作品更有张力…

css-inpu边框

效果图&#xff1a; input {width: 225px;height: 25px;background-color: #1469bd00;border: #aca9a97d solid 1px;color: white;font-size: 15pt;box-sizing: conte-box; }input:focus {border-style: solid;border-color: #03a9f4;box-shadow: 0 0 15px #03a9f4;outline: …