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

makefile 编译动态链接库使用(.so库文件)

makefile 编译动态链接库使用(.so库文件)

动态链接库:不会把代码编译到二进制文件中,而是在运行时才去加载, 好处是程序可以和库文件分离,可以分别发版,然后库文件可以被多处共享

动态链接库

动态:动态加载

链接:二进制文件和库文件分离。

库 库文件 .so

新建一个文件TestSo

//
// Created by qiufh on 2024-01-21.
//#ifndef UNTITLED3_TESTSO_H
#define UNTITLED3_TESTSO_Hclass TestSo {
public:void fun1();virtual void fun2();virtual void fun3() = 0;
};
//
// Created by qiufh on 2024-01-21.
//#include "TestSo.h"
#include <iostream>
void TestSo::fun1() {printf("fun1\n");
}
void TestSo::fun2() {printf("fun2\n");
}
void TestSo::fun3() {printf("fun3\n");
}

在这里插入图片描述

编译一下

在这里插入图片描述

main.cpp

#include <iostream>
#include "TestSo.h"
class Test:public TestSo{
public:void fun2() {printf("fun2\n");}void fun3() {printf("fun3\n");}
};
int main() {Test test;test.fun1();test.fun2();test.fun3();std::cout << "Hello, World!" << std::endl;return 0;
}

写好之后我们放到linux系统中验证

在这里插入图片描述

编译成动态库.so文件

在这里插入图片描述

新建一个test.cpp测试文件

#include <iostream>
#include "SoTest.h"
class Test:public SoTest{
public:void fun2() {printf("fun2\n");}void fun3() {printf("fun3\n");}
};
int main() {Test test;test.fun1();test.fun2();test.fun3();return 0;
}

链接动态库文件,执行测试一下,没问题,输出打印信息。

在这里插入图片描述

将cpp文件与so文件链接并生成执行文件:先将so文件拷贝至/lib文件夹内:

在这里插入图片描述

否则将会出现下面的错误:

在这里插入图片描述

把这个动态库的编译流程写入makefile文件中

在这里插入图片描述

先clean一下

在这里插入图片描述

再make一下

在这里插入图片描述

然后要把so文件拷贝到/lib目录下,否则会报错

在这里插入图片描述

成功

在这里插入图片描述

相关文章:

makefile 编译动态链接库使用(.so库文件)

makefile 编译动态链接库使用&#xff08;.so库文件&#xff09; 动态链接库:不会把代码编译到二进制文件中&#xff0c;而是在运行时才去加载&#xff0c; 好处是程序可以和库文件分离&#xff0c;可以分别发版&#xff0c;然后库文件可以被多处共享 动态链接库 动态&#…...

Hive 数仓及数仓设计方案

数仓(Data Warehouse) 数据仓库存在的意义在于对企业的所有数据进行汇总&#xff0c;为企业各个部门提供一个统一、规范的出口。做数仓就是做方案&#xff0c;是用数据治理企业的方案。 数据仓库的特点 面向主题集成 公司中不同的部门都会去数据仓库中拿数据&#xff0c;把独…...

Ubuntu使用docker-compose安装redis

ubuntu环境搭建专栏&#x1f517;点击跳转 Ubuntu系统环境搭建&#xff08;十三&#xff09;——使用docker-compose安装redis 文章目录 Ubuntu系统环境搭建&#xff08;十三&#xff09;——使用docker-compose安装redis1.搭建文件夹2.docker-compose.yaml配置文件3.redis.co…...

大数据安全 | 期末复习(上)| 补档

文章目录 &#x1f4da;概述⭐️&#x1f407;大数据的定义、来源、特点&#x1f407;大数据安全的含义&#x1f407;大数据安全威胁&#x1f407;保障大数据安全&#x1f407;采集、存储、挖掘环节的安全技术&#x1f407;大数据用于安全&#x1f407;隐私的定义、属性、分类、…...

Kylin 安装novnc 远程访问

noVNC可以使用浏览器直接访问服务器&#xff0c;而不需要使用VNC客户端。 1.初始环境 关闭防火墙或允许IP访问本机 2.安装依赖 dnf install -y tigervnc-server git 3.git下载novnc git clone https://github.com/novnc/noVNC.git git clone https://gitee.com/yangyizhao…...

神经网络算法与逻辑回归:优势与差异

神经网络算法和逻辑回归都是预测模型中的重要工具&#xff0c;但它们在处理复杂和非线性问题时表现出不同的性能。本文将深入探讨神经网络算法相对于逻辑回归的优势&#xff0c;以及它们在不同场景下的适用性。 一、引言 神经网络算法和逻辑回归都是预测模型中的重要工具&…...

【蓝桥杯冲冲冲】动态规划初步[USACO2006 OPEN] 县集市

蓝桥杯备赛 | 洛谷做题打卡day13 文章目录 蓝桥杯备赛 | 洛谷做题打卡day13题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示样例说明数据规模与约定 思路&#xff1a;方程&#xff1a; 题解代码我的一些话 [USACO2006 OPEN] 县集市 The County Fair 题目描述 每年…...

C#,入门教程(30)——扎好程序的笼子,错误处理 try catch

上一篇&#xff1a; C#&#xff0c;入门教程(29)——修饰词静态&#xff08;static&#xff09;的用法详解https://blog.csdn.net/beijinghorn/article/details/124683349 程序员语录&#xff1a;凡程序必有错&#xff0c;凡有错未必改&#xff01; 程序出错的原因千千万&…...

操作教程|JumpServer堡垒机结合Ansible进行批量系统初始化

运维人员常常需要对资产进行系统初始化的操作&#xff0c;而初始化服务器又是一项繁琐的工作&#xff0c;需要花费运维人员大量的时间和精力。为了提高效率&#xff0c;许多组织会使用自动化工具和脚本来简化这些任务。自动化工具的运用可以大幅降低运维人员的工作量&#xff0…...

序列化VS反序列化

序列化、反序列化定义 如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中&#xff0c;或者在网络传输 Java 对象&#xff0c;这些场景都需要用到序列化。 序列化&#xff08;Serialization&#xff09;是指将对象转换为字节序列的过程&#xff0c;也可以称之为对象的持…...

新数智空间:阿里云边缘云持续保持中国公有云市场第一

全球领先的 IT 市场研究和咨询公司 IDC 发布 《中国边缘云市场解读&#xff08;2023H1&#xff09;》报告 中国边缘公有云服务市场 阿里云持续第一 稳居市场第一&#xff0c;“边缘”逆势生长 近日&#xff0c;全球领先的 IT 市场研究和咨询公司 IDC 最新发布《中国边缘云市…...

【开源】基于JAVA语言的陕西非物质文化遗产网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 设计目标2.2 研究内容2.3 研究方法与过程2.3.1 系统设计2.3.2 查阅文献2.3.3 网站分析2.3.4 网站设计2.3.5 网站实现2.3.6 系统测试与效果分析 三、系统展示四、核心代码4.1 查询民间文学4.2 查询传统音乐4.3 增改传统舞…...

C++(Qt)软件调试---静态分析工具clang-tidy(18)

C(Qt)软件调试—静态分析工具clang-tidy&#xff08;18&#xff09; 文章目录 C(Qt)软件调试---静态分析工具clang-tidy&#xff08;18&#xff09;1、概述2、clang-tidy基本用法3、目前已有检查项4、Qt Creator中安装clang-tidy5、Qt Creator中使用clang-tidy6、Clang-Tidy配置…...

2401llvm,clang的重构引擎

Clang的重构引擎 展示如何使用重构API中的各种原语来实现不同的重构. LibTooling库提供了几个在开发重构操作时,使用的其他API. 可用重构引擎来实现,用编辑器或IDE中的选择启动的本地重构.可结合AST匹配器和重构引擎,以实现不适合源选择和/或必须查询某些指定节点的AST的重构…...

【C语言深度剖析——第四节(关键字4)】《C语言深度解剖》+蛋哥分析+个人理解

追求本质&#xff0c;不断进步 本文由睡觉待开机原创&#xff0c;转载请注明出处。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言&#xff0c;共同进步&#xff01; 这里写目录标题 一、空间的申请1.变量定义1.1变量定义的概念&#xff1a;1.2变…...

鸿蒙开发系列教程(五)--ArkTS语言:组件开发

1、基础组件 组件API文档&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/84_u58f0_u660e_u5f0f_u5f00_u53d1_u8303_u5f0f_uff09-0000001427744776-V2 查看组件API 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 容…...

Java:正则表达式讲解加举例,简洁易懂

正则表达式定义&#xff1a; 由一些特定的字符组成&#xff0c;代表的是一个规则。 作用&#xff1a;1.校验数据是否合法。2.可以在一段文本中查找满足要求的内容。 先自己写一个方法去校验qq号&#xff0c;比较与正则表达式的区别&#xff1a; 正则表达式的代码暂时可以不…...

2.机器学习-K最近邻(k-Nearest Neighbor,KNN)分类算法原理讲解

2️⃣机器学习-K最近邻&#xff08;k-Nearest Neighbor&#xff0c;KNN&#xff09;分类算法原理讲解 个人简介一算法概述二算法思想2.1 KNN的优缺点 三实例演示3.1电影分类3.2使用KNN算法预测 鸢(yuan)尾花 的种类3.3 预测年收入是否大于50K美元 个人简介 &#x1f3d8;️&…...

​WordPress顶部管理工具栏怎么添加一二级自定义菜单?

默认情况下&#xff0c;WordPress前端和后台页面顶部都有一个“管理工具栏”&#xff0c;左侧一般就是站点名称、评论、新建&#xff0c;右侧就是您好&#xff0c;用户名称和头像。那么我们是否可以在这个管理工具栏中添加一些一二级自定义菜单呢&#xff1f; 其实&#xff0c…...

Linux安装ossutil工具且在Jenkins中执行shell脚本下载文件

测试中遇到想通过Jenkins下载OSS桶上的文件&#xff0c;要先在linux上安装ossutil工具&#xff0c;记录安装过程如下&#xff1a; 一、下载安装ossutil&#xff0c;使用命令 1.下载&#xff1a;wget https://gosspublic.alicdn.com/ossutil/1.7.13/ossutil64 2.一定要赋权限…...

FPGA新手必看:用Verilog手搓一个SPI Master控制器(Mode 0/3实战)

FPGA实战&#xff1a;从零构建SPI Master控制器的Verilog实现指南 1. 初识SPI协议与FPGA开发环境搭建 对于刚接触FPGA和数字电路设计的工程师来说&#xff0c;SPI&#xff08;Serial Peripheral Interface&#xff09;协议是一个理想的起点。这种同步串行通信协议广泛应用于传感…...

NotebookLM评论反馈功能全链路拆解(从Prompt响应延迟到语义锚定失效的7个致命断点)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM评论反馈功能的架构全景与设计初衷 NotebookLM 的评论反馈功能并非简单的 UI 层叠加&#xff0c;而是贯穿数据流、状态管理与协同语义理解的深度集成模块。其核心目标是让用户在阅读、引用或…...

你的综述,为什么像文献摘要合集?

相信不少科研人都有过这样的挫败&#xff1a;熬了数个夜晚整理几十篇文献&#xff0c;写出来的综述却被导师批“没有灵魂”——只是把文献摘要简单翻译、拼接&#xff0c;看不到领域的发展脉络&#xff0c;抓不住不同研究间的学术争议&#xff0c;更找不到值得深挖的研究空间&a…...

技术演进:从PDH到SDH的WAN接口变迁与POS/CPOS应用解析

1. 从铜缆到光纤&#xff1a;PDH与SDH的技术演进之路 记得我第一次接触E1接口是在2008年&#xff0c;当时在一家电信机房看到一排闪着绿色指示灯的设备&#xff0c;老师傅告诉我这就是承载着电话业务的"2M线"。那时候我还不知道&#xff0c;这个看似简单的接口背后&a…...

【免费下载】 PyTorch框架入门PPT下载

PyTorch框架入门PPT下载 【下载地址】PyTorch框架入门PPT下载 PyTorch框架入门PPT下载 项目地址: https://gitcode.com/open-source-toolkit/a64b8 资源介绍 本仓库提供了一个名为“PyTorch框架入门PPT”的资源文件下载。该PPT文件旨在帮助初学者快速入门PyTorch框架&a…...

Spring AI + Ollama 深度实战:从 RAG 问答到 Graph Agent 全流程指南

场景 Spring AI RAG 检索增强生成&#xff1a;概念、实战与完整代码&#xff1a; https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/161055108 基于上面的基础&#xff0c;实现Graph工作流编排的简单示例。 大语言模型&#xff08;LLM&#xff09;在实际应用中面…...

[通俗易懂]从“生产者-消费者”模型秒懂Java泛型PECS原则(别再死记硬背了)

1. 从超市购物理解PECS原则 想象你正在超市采购水果。水果区有各种水果篮&#xff1a;有的专放苹果&#xff0c;有的专放香蕉&#xff0c;还有个"混合水果区"放各种水果。这时候你会发现两个有趣的现象&#xff1a; 从水果区取水果&#xff1a;你可以从任何水果篮里安…...

AI大模型大数据隐私安全解决方案

随着人工智能技术飞速迭代&#xff0c;大模型训练、精调与推理愈发依赖海量数据&#xff0c;云上环境的便捷性也让数据隐私保护面临严峻挑战。AI大模型数据处理全流程包含大量敏感信息&#xff0c;一旦泄露、篡改或滥用&#xff0c;将损害用户权益、引发合规风险与信任危机。因…...

MXFP混合精度注意力机制优化LLM推理性能

1. 低比特MXFP混合精度注意力机制解析在大型语言模型(LLM)推理过程中&#xff0c;自注意力机制的计算开销一直是主要瓶颈。传统FP16/BF16精度计算虽然能保证模型质量&#xff0c;但存在显著的内存带宽浪费和计算资源利用率不足问题。MXFP&#xff08;Microscaling Floating-Poi…...

硬件工程师避坑指南:从原理到实战,搞定ESD防护设计与IEC 61000-4-2测试

硬件工程师避坑指南&#xff1a;从原理到实战&#xff0c;搞定ESD防护设计与IEC 61000-4-2测试 在北方干燥的冬季&#xff0c;脱下毛衣时噼啪作响的静电火花或许只是生活中的小插曲&#xff0c;但对于价值数百万的医疗设备或自动驾驶系统而言&#xff0c;同样的静电放电&#x…...