把TeamTalk(即时通讯项目)中的线程池连接池拆出来单独测试。

news2024/12/25 9:04:48

研究过Teamtalk的伙伴会发现它的线程池和连接池与很多文件有关联, 这篇文章主要写,把它的线程池连接池拆出来需要用到哪些文件。
其实我本来只想测试它的连接池的,但发现连接池里套的有线程池,于是就一起拆出来了。

整个工程的树目录结构如下:
在这里插入图片描述这里可以忽略build目录内部的所有文件,因为这是cmake后产生的。

base目录里的文件如下:
在这里插入图片描述因为连接池是在db_proxy_server服务器上的,所以这里我与teamtalk保持一致创建的是db_proxy_server目录,内容如下:

在这里插入图片描述这里比较重要的是libbase.a , libslog.so, libhiredis.a
简单讲解这三个库文件来自哪里,
libslog.a: 与base同级目录下有一个slog文件夹,不是我这上边的slog文件夹(我这个是base目录里的slog,只包含了头文件,因为util.h会用到这个头文件), 将里面的源文件编译为库文件(libslog.a)即可,还有一点需要说明, slog日志库就是对log4c××的封装。

libbase.a: 就是base目录里面的所有源文件编译出来的库。
libhiredis.a: 这个是安装hiredis的时候生成的库,作为一个客户端与redis服务器通讯,在redis连接池中需要用到。
强调一点, 这三个库文件,直接放到/usr/lib中,cp libbase.a , libslog.so, libhiredis.a /usr/lib 不然找不到, 当然你可以通过CMakeLists.txt文件自定义路径。

看一下比较关键的CMakeLists.txt文件内容:可以着重看一下我里面的注释,对于LINK_DIRECTORIES是有细节的,它的路径决定了libbase.a , libslog.so, libhiredis.a的寻找路径, 如果你把这三个库文件放到了/usr/lib中则可以不用在这里配置这三个库文件的寻找路径(但还是需要这句话,因为还有mysql的库文件路径)。

cmake_minimum_required(VERSION 2.6)
PROJECT(dbpool_test)

AUX_SOURCE_DIRECTORY(./ SRC_LIST)

SET(EXECUTABLE_OUTPUT_PATH  ./)

SET(MYSQL_INCLUDE_DIR /usr/include/mysql)
SET(MYSQL_LIB /usr/lib64/mysql)

#加上 -static 表示显式调用静态库
ADD_DEFINITIONS( -g -W -Wall -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DAC_HAS_INFO
-DAC_HAS_WARNING -DAC_HAS_ERROR -DAC_HAS_CRITICAL -DTIXML_USE_STL
-DAC_HAS_DEBUG -DLINUX_DAEMON -std=c++11 -DENCRYPT )

#这个相当于 -I   指定头文件路径
INCLUDE_DIRECTORIES(./ ../base ${MYSQL_INCLUDE_DIR})

#这个相当于 -L   指定库文件路径
#这里有个细节, 如果新建了build目录,cd build -> cmake .. 则这里必须要多退一级,比如./ 要更换为 ../
#而上边的那些却不用
LINK_DIRECTORIES(./  ../ ../base ${MYSQL_LIB} )


ADD_EXECUTABLE(dbpool_test ${SRC_LIST})

TARGET_LINK_LIBRARIES(dbpool_test base pthread mysqlclient slog hiredis)

db_proxy_server中有三个头文件不是自己写的
read.h, sds.h, hiredis.h, 这三个头文件都是安装hiredis的时候,里面搬运过来的。

整个编译过程就是在db_proxy_server中:
mkdir build -> cd build -> cmake … -> make 即可

整个工程链接
提取码:o0ma

如果你因为某些库文件导致无法运行,不用担心, 我这里使用shell脚本把所有依赖的库打包下来, 一定可以运行。
所有库文件打包好的
提取码:0cem

简单说明两个链接的区别, 第一个工程链接是所有源文件,以及那三个库文件的打包,如果你以前成功编译过teamtalk工程, 就一定可以运行, 但如果是新手就不能运行,因为可能缺少某些依赖;
而下边这个链接,我已经用脚本打包好了所有依赖的库,不管你以前有没有编译过teamtalk ,都可以直接运行。

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

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

相关文章

基于SpringBoot的社区小型图书管理系统的设计与实现

作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云…

有效操作:Ubuntu上已经安装最新node但是node -v返回的版本号确实错的;ubuntu第一次启动vue项目报npm版本错误

** 如已经安装过最新版的node话可直接跳到操作6: 1.查看node版本,没安装的请先安装; node -v 如果安装成功的话会返回版本号: 2.如果nodejs包出错需要重新安装的话,删除不干净会有可能出现问题,下面就介…

应用出海活跃,开发教程

移动应用行业在国内显现出用户增量放缓的趋势,多种类型的应用渗透率也渐趋饱和。随着政策支持力度的加大,越来越多移动应用走向了海外市场,拓宽用户群。 根据艾瑞咨询在《2022年移动应用出海趋势洞察白皮书》中指出,游戏类占出海…

开源项目-CRM客户关系管理系统

哈喽,大家好,今天给大家带来一个开源系统-CRM客户关系管理系统 主要功能包括客户管理,客户流失,销售机会,客户关怀等模块 系统开发环境以及版本 操作系统: Windows_7集成开发工具: Eclipse EE_…

Zabbix技术分享——snmp异常排查指南

大家好,我是乐乐。在IT运维中,难免会碰上设备snmp不通的情况,那么,当问题出现的时候,运维工程师该如何快速找到问题所在呢?下面让我们一起来看看吧! 1.IP配置检查 首先检查zabbix监…

蓝牙模块芯片型号有哪些?国产还是进口?核心指标有哪些

目录 一、蓝牙模块的简介 先看看百度百科对“蓝牙模块”的定义蓝牙模块,是一种集成蓝牙功能的PCBA板,用于短距离无线通讯,按功能分为蓝牙数据模块和蓝牙语音模块。蓝牙模块是指集成蓝牙功能的芯片基本电路集合,用于无线网络通讯&…

UTONMOS链游将为GameFi游戏玩家带来更多的可能

2022年,全球新型冠状病毒疫情尚未彻底消弭,尽管少数国家的隔离措施和防疫规定已开始逐渐放宽,我国也已在疫情防控上估到彻底放开,但人们的生活却远未恢复“常态”。 近3年来,世界各国实施的防疫隔离和封城措施&#x…

Hive+Spark离线数仓工业项目实战--数仓设计及数据采集(2)

MR的Uber模式 目标:了解MR的Uber模式的配置及应用 实施 - Spark为什么要比MR要快 - MR慢 - 只有Map和Reduce阶段,每个阶段的结果都必须写入磁盘 - 如果要实现Map1 -> Map2 -> Reduce1 -> Reduce2 - Mapreduce1:Map…

完全可移植c2000控制器工程模板创建

完全可移植c2000控制器工程模板创建前言步骤创建工程库函数支撑文件拷贝寄存器支撑文件拷贝参考博文及资料前言 迄今为止只学过TI的两款c2000控制器TMS320F280049C和28335,并且所有代码编写都是通过写寄存器来实现的。相较于直接使用TI编写好的库函数,写…

Node.js--》Node环境及nvm版本管理安装及使用

目录 初识Node.js Node.js环境安装 nvm的安装 Node.js环境执行JS代码 初识Node.js Node.js是一个开源、跨平台的 JavaScript 运行时环境。其中文的官方网址为:Node.js官方网址 注意:浏览器是JavaScript的前端运行环境;Node.js是JavaScri…

OpManager 实时网络监控

网络是全球企业背后的基础。它在为您的员工提供行政服务以及为各大洲的客户提供服务方面发挥着关键作用。网络可帮助您将信息保存在一个集中位置 - 需要和限制所有其他入站请求的人员可以访问。那么,您如何提供持续的一流最终用户体验并维护快速发展的网络呢&#x…

JS面试题--ES6知识大全

ES6知识 字面量增强的写法的三种写法 ES6中对 对象字面量 进行了增强,称之为 Enhanced object literals(增强对象字面量)。 字面量的增强主要包括下面几部分: 属性的简写:Property Shorthand方法的简写&#xff1a…

测开工具:二次开发junit接口自动化框架

一:背景 源码地址:GitHub - 18713341733/AutoApi Java 接口自动化框架,一般就是junit与testng。这里我们讲一下junit接口自动化框架的二次开发。 1.1 我们实现了哪些功能 1、自定义了一些注解,用来管理case。包括case的描述、…

如何使用depcheck检查依赖?

目录 1. 你是否遇到过以下问题: 2. 原因 3. 解决 4. depcheck的其他功能 5.需要说明可能存在的问题 总结 1. 你是否遇到过以下问题: 1. GitHub上面克隆的项目,运行报错… 2.去一家新公司,用新电脑运行项目各种报错… 3.明…

有关linux中的文件IO的操作

Linux 应用编程中最需要掌握的基础就是文件 I/O的操作,学习过linux或者有过了解的应该都会听过一句话:linux中一切皆文件,文件是linux系统的核心设计思想。所以掌握文件的操作是很重要的。 那文件 I/O 又是什么?文件I/O指的是对文…

NumPy transpose 的定义与计算过程

NumPy transpose 的定义与计算过程NumPy documentation https://numpy.org/doc/stable/index.html numpy.transpose https://numpy.org/doc/stable/reference/generated/numpy.transpose.html numpy.ndarray.transpose https://numpy.org/doc/stable/reference/generated/num…

π120M31 10Mbps双通道数字隔离器兼容代替ADuM1200BR

π120M31 10Mbps双通道数字隔离器兼容代替ADuM1200BR 。具有出色的性能特征和可靠性,整体性能优于光耦和基于其他原理的数字隔离器产品。传输通道间彼此独立,可实现多种传输方向的配置,可实现 3.0kV rms 隔离耐压等级和 DC 到 10Mbps 信号传输…

网络通信基础

2022年圣诞节到来啦,很高兴这次我们又能一起度过~ 祝大家圣诞快乐🎄 网络互连的目的是进行网络通信, 也即是网络数据传输, 再具体一点, 是网络主机中的不同进程间, 基于网络传输数据. 那么, 在组建的网络中, 如何判断到底是从哪台主机, 将数据传输到那…

JAVA物联网云平台源码/Modbus/视频接入 物联网智能看板源码

JAVA物联网云平台使用 Java 语言、主流技术组合(MQTT、Spring Boot、Shiro、MyBatis、Druid、Ehcache、Thymeleaf、Bootstrap、Swagger)开发,支持多数据源,支持代码一键生成。 1、包含物联网云平台源码(源码全部开放&a…

【Three.js入门】灯光与阴影、平行光阴影属性、聚光灯的属性和应用

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,也会涉及到服务端 📃个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀未…