C++项目在Linux下编译动态库

一、说明

最近在Windows下开发了一个C++线程池项目,准备移植到Linux下,并且编译成动态库进行使用。现将具体过程在此记录。

二、准备

1、项目文件

我的项目文件如下,其中除main.cpp是测试文件之外,其他都是线程池项目相关的

将C++文件移动到Linux中:

2、编译器

要有C++编译器,并适配自己代码中的C++标准。比如我项目中使用了C++17标准,那么所用的g++编译器的版本也要能够支持C++17。如下图,使用g++ -v 可以查看当前编译器版本。

 三、编译

使用命令:

g++ -fPIC -shared threadpool.cpp -o libtdpool.so -std=c++17
  • -fPIC: 这个选项告诉编译器生成位置无关的代码(Position Independent Code)。这对于生成动态链接库(shared libraries)是必须的,因为动态链接库可以在内存中的任何位置被加载。

  • -shared: 这个选项指示编译器生成一个动态链接库(shared object file),而不是一个可执行文件。

  • threadpool.cpp: 这是要编译的源文件。

  • -o libtdpool.so-o 选项后面跟的是输出文件的名称。在这里,输出文件是一个名为 libtdpool.so 的动态链接库。.so 是 Linux 系统上动态链接库的常用扩展名。

  • -std=c++17: 这个选项指定了使用 C++17 标准来编译代码。这意味着编译器会支持 C++17 引入的所有新特性和语法。 

编译完成后查看目录,出现了 libtdpool.so 文件,说明编译成功。现在就不需要threadpool.cpp文件了。

四、移动文件

 Linux中,系统会自动去/usr/local/lib/文件夹中寻找动态库,去/usr/local/include/目录下寻找头文件,所以要将它们移动过去,注意要使用sudo权限。

动态库文件在下图最后一个位置:

所有头文件也在如下目录中:

 五、配置

此时,其他项目还不能直接使用我们准备好的库,虽然能够进行编译,也能够编译出.out文件,但是在运行时会报错:

 这个报错表示运行过程中找不到.so库,这是因为,编译阶段和运行阶段找库的路径是不同的。

在编译阶段会去/usr/local/lib/ 或者 /usr/lib/ 下找,这一阶段我们已经处理好。

在运行阶段,会去 /etc/ld.so.cache 这个缓存文件下找,我们不修改这个缓存文件,但是我们可以通过操作其同目录下的.conf文件

 .conf文件内容:

内容只有一行,表示include .conf.d目录下的所有 .conf文件。我们可以去看下目录下有什么:

 目录下包含几个.conf文件,其中有我刚刚新建的mylib.conf,并在其中将libtdpool.so的路径放进去:

 

这样再使用命令 ldconfig 刷新刚写的.conf文件,将其中的路径全部刷新到前文提到的ld.so.cache文件中。

至此运行 a.out 可执行文件就不再有链接错误。

 六、总结

第五步的配置是经常会碰到的问题,是本次记录的一个重点。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

双系统下删除ubuntu

絮絮叨叨 由于我在安装Ubuntu的时候没有自定义安装位置,而是使用与window共存的方式让Ubuntu自己选择安装位置,导致卸载时我不知道去格式化哪个分区,查阅多方资料后无果,后在大佬帮助下找到解决方案 解决步骤 1、 插上Ubuntu安…

【IR 论文】DPR — 最早提出使用嵌入向量来检索文档的模型

论文:Dense Passage Retrieval for Open-Domain Question Answering ⭐⭐⭐⭐⭐ EMNLP 2020, Facebook Research Code: github.com/facebookresearch/DPR 文章目录 一、论文速读二、DPR 的训练2.1 正样本和负样本的选取2.2 In-batch negatives 技巧 三、实验3.1 数据…

医学影像增强:空间域方法与频域方法等

医学影像图像增强是一项关键技术,旨在改善图像质量,以便更好地进行疾病诊断和评估。增强方法通常分为两大类:空间域方法和频域方法。 一、 空间域方法 空间域方法涉及直接对医学影像的像素值进行操作,以提高图像的视觉质量。以下是一些常用的空间域方法: 对比度调整:通过…

双向链表的介绍

引入 特点 操作 定义 插入 删除 小结 整合代码: //定义 typedef struct node{int data;node* next,prior; }Dlnode,*Dlinklist;//初始 void init(Dlinklist &l){Dlnode lnew Dlnode;l->nextNULL;l->priorNULL; }//插入:插入指定位置&#…

buuctf-misc-rar

13.rar 题目:直接破解就可以了 这个借用工具Aparch进行4位纯数字暴力破解,根据题目的提示是4位的纯数字,那我们就选择数字的破解 在长度这里,把最小口令长度和最大口令长度都选择为4 获得密码后进行解压。

各省财政涉农支出统计数据集(2001-2022年)

01、数据简介 财政涉农支出是指在政府预算中,用于支持农业、农村和农民发展的财政支出。这些支出旨在促进农村经济的发展,提高农民收入,改善农村生产生活条件,推进农业现代化。 在未来的发展中,各省将继续加大财政涉…

【研发管理】产品经理知识体系-产品设计与开发工具

导读:产品设计与开发工具的重要性体现在多个方面,它们对于产品的成功开发、质量提升以及市场竞争力都具有至关重要的影响。产品设计工具可以帮助设计师更高效地创建和优化产品原型。开发工具在产品开发过程中发挥着至关重要的作用。产品设计与开发工具还…

这三个AI导航站,你绝对用得到!!

Hi,这里是前端后花园,专注分享前端软件网站、工具资源。不得不说AI正在慢慢改变我们学习和工作方式,今天带来这三个AI导航站,总有一个你用得到,记得收藏啊! AI工具集 https://ai-bot.cn/ 网站汇集了700 …

Linux多线程(三) 线程池C++实现

一、线程池原理 我们使用线程的时候就去创建一个线程,这样实现起来非常简便。但如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需…

华为MRS服务使用记录

背景:公司的业务需求是使用华为的这一套成品来进行开发,使用中发现,这个产品跟原生的Hadoop的那一套的使用,还是有很大的区别的,现记录一下,避免以后忘了 一、原始代码的下载 下载地址:MRS样例…

STM32HAL库++ESP8266+cJSON连接阿里云物联网平台

实验使用资源:正点原子F1 USART1:PA9P、A10(串口打印调试) USART3:PB10、PB11(WiFi模块) DHT11:PG11(采集数据、上报) LED0、1:PB5、PE5&#xff…

input框添加验证(如只允许输入数字)中文输入导致显示问题的解决方案

文章目录 input框添加验证(如只允许输入数字)中文输入导致显示问题的解决方案问题描述解决办法 onCompositionStart与onCompositionEnd input框添加验证(如只允许输入数字)中文输入导致显示问题的解决方案 问题描述 测试环境:react antd input (react的事件与原生…

浅谈在Java代码中创建线程的多种方式

文章目录 一、Thread 类1.1 跨平台性 二、Thread 类里的常用方法三、创建线程的方法1、自定义一个类,继承Thread类,重写run方法1.1、调用 start() 方法与调用 run() 方法来创建线程,有什么区别?1.2、sleep()方法 2、自定义一个类&…

嵌入式常见存储器

阅读引言: 在看一款芯片的数据手册的时候, 无意间翻到了它的启动模式(Boot Mode), 发现这种这么多种ROM,所以就写下了这篇文章。 目录 一、存储器汇总 二、易失性存储器(RAM) 1. SRAM 1.1 单口SRAM 1.2 双口SRAM 2. DRAM 2.1 SDRAM 2…

Fast-DetectGPT 无需训练的快速文本检测

本文提出了一种新的文本检测方法 ——Fast-DetectGPT,无需训练,直接使用开源小语言模型检测各种大语言模型,如GPT等生成的文本内容。 Fast-DetectGPT 将检测速度提高了 340 倍,将检测准确率相对提升了 75%,超过商用系…

有哪些好用电脑端时间定时软件?桌面日程安排软件推荐 桌面备忘录

随着现代生活节奏的加快,人们对于时间管理和任务提醒的需求越来越大。为了满足这一需求,市场上涌现出了众多桌面便签备忘录软件,它们不仅可以帮助我们记录待办事项,还能定时提醒我们完成任务。在这篇文章中,我将为大家…

计算机研究生如何在顶级会议了解行业方向

以为例子论文可视化 |WACV 2022 年 (thecvf.com)https://wacv2022.thecvf.com/papers-visualizations?filterprimary_subject_area&search3DComputerVision 这些图表适用于IEEE/CVF 计算机视觉冬季会议 (WACV) 2022。顶部图表是根据彼此相似性分布的会议主要会议论文的可…

微电子领域材料生长方法(六)液相外延(LPE)

微电子领域材料生长方法(六)液相外延(LPE) 液相外延(Liquid Phase Epitaxy, LPE)是一种用于生长单晶薄膜的技术,特别是在半导体材料的制备中。LPE技术允许在较低的温度下从熔体中生长出高质量的…

Visual 下载 NuGet包速度变慢

Visual 下载 NuGet包速度变慢 最近遇到一个问题,即我在使用 Visual Studio 下载 Nuget 包的时候会发现变得特别慢,那么该如何解决该问题呢 Visual Studio → 工具 → NuGet 包管理项 → 程序包管理设置 → 程序包源 从上面我们可以看到我使用的包源地址…

2024 最新免费听全网音乐神器

之前分享过几个的音乐软件挂了2024最新神器app,全网音乐免费听 ,这里再整理分享下,下载地址 https://pan.quark.cn/s/b52ada313fbd 玩转互联网达人 苏生不惑备用号,分享各种黑科技软件资源和技巧,带你玩转互联网。 …