利用vcpkg编译InfluxDB-cxx库
1.背景介绍
vcpkg工具是微软的开源软件C++编译发布平台
InfluxDB-CXX是利用curl和boost实现的Influxdb的C++客户端,同类产品还有InfluxDB-cpp库等,这些库都不是官方的C++实现。
编译Influxdb-cxx库主要问题包括:
windows下的编译问题
c++17标准带来的问题
2.存在的主要问题
2.1 vcpkg安装Boost的问题
利用vcpkg安装库,需要从github或其他路径下载源代码包,在内网条件下需要将源代码包下载到[vcpkg_root]\downloads路径下。
但是github可能会访问不了,以下的脚本将辅助下载需要的库
#在vcpkg目录下执行如下命令,获取需要下载的包#记得断网条件下执行#以boost为例.\vcpkg.exe install boost --only-downloads >1.txt#帅选需要下载的行find "-- Downloading " 1.txt > 2.txtfind " -> " 2.txt > 3.txt#然后利用3.txt中的下载行从镜像站点下载
用于从镜像站点下载的Python脚本如下:
import requestsimport argparseimport os,timefrom multiprocessing import Pooldef download(tUrl, tFile):"""Function 下载URL到文件@param tUrl DESCRIPTION@type TYPE@param tFile DESCRIPTION@type TYPE"""#tUrl = 'https://gh.api.99988866.xyz/github.com/boostorg/logic/archive/boost-1.75.0.tar.gz'res = requests.get(tUrl)#tFile = 'boostorg-logic-boost-1.75.0.tar.gz'with open(tFile, 'wb') as f:f.write(res.content)print("finish!%s -> %s"%(tUrl, tFile))def download2(item):"""Function @param item DESCRIPTION@type TYPE"""tUrl, tFile = itemtFile = os.path.join(r"D:\迅雷下载\dw", tFile)download(tUrl, tFile)def loadFile(tFile):"""Function @param tFile DESCRIPTION@type TYPE"""tRes =[]tStart ="-- Downloading https://"tURLBase = "https://gh.api.99988866.xyz/"with open(tFile, 'r') as f:tLines = f.readlines()#分析所有行for iL in tLines:if iL.startswith(tStart):iL = iL.replace("-- Downloading https://", '')iL = iL.replace("...", '')its = iL.split("->")tUrl = tURLBase + its[0].strip()tFname = its[-1].strip()tRes.append([tUrl, tFname])return tResdef main(args):"""Function @param args DESCRIPTION@type TYPE"""tRes = loadFile(args.df)print(tRes) for iR in tRes:download2(iR)#多进程下载# with Pool(1) as p:# ret = p.map(download,tRes) # func(next(range(10)))# print(ret) if __name__=="__main__":"""寻求下载python [thisscript].py 3.txt"""parser = argparse.ArgumentParser(description='Process some integers.')parser.add_argument('df', type=str, help='an integer for the accumulator')parser.add_argument('--tgt', type=str, help='目标目录', default="")args = parser.parse_args()main(args)
下载完成后,将所有包复制到对应的downloads中。
2.2 vcpkg安装Influxdb-cxx问题
Influxdb-cxx的vcpkg的ports有0.6.6和0.6.7两个版本,均存在问题
src\UriParser.h(30): error C2461: 'http::url': constructor syntax missing formal parameters [src\InfluxDB-BoostSupport.vcxproj]src\UriParser.h(98): error C2440: 'return': cannot convert from 'initializer list' to 'http::url' [src\InfluxDB-BoostSupport.vcxproj]
这是某种不知名的语法错误导致的,纠正方法
// patch the file src\UriParser.h// on line 29namespace http {struct url {std::string protocol, user, password, host, path, search, url1;int port;url(const std::string& protocol, const std::string& user, const std::string& password = "", const std::string& host = "", const std::string& path = "", const std::string& search="", const std::string& url1="",int port=8086): protocol(protocol), user(user), password(password), host(host), path(path), search(search), url1(url1) , port(port) {}};
// 修正错误 src\Point.cxx// line 61convert << name.data() << "=";// 修正错误 src\InfluxDBFactory.cxx// line 43 auto transport = std::make_unique<transports::HTTP>(uri.url1);
修改这三处之后,重新编译。需要使用--editable
.\vcpkg install influxdb-cxx[boost] --editable
vcpkg使用的代码仓库是https://github.com/offa/influxdb-cxx
3. Influxdb-cxx的例子
网上很多,这里就不说了。
利用vcpkg编译InfluxDB-cxx库相关推荐
- 将java编译成so库_利用android studio 生成 JNI需要的动态库so文件
JNI: Java Native Interface, 提供了java语言和其他语言(例如c和c++)进行相互调用的方式. 本文是用java调用c生成的so模式.其中,编译so文件过程如下: 1) ...
- OpenCV配置(利用Source编译,并配置扩展库opencv_contrib)
OpenCV配置(利用Source编译,并配置扩展库opencv_contrib) 1. 配置所需(以个人版本为准) 1.1 CMake下载 1.2 OpenCV Source下载 1.3 OpenC ...
- linux编译poco静态库,iOS——为Xcode编译POCO C++静态库
一.POCO C++ library简介 POCO C++ library是一个C++编写的跨平台库,主要实现网络连接.数据库管理以及服务器,适用于跨平台.嵌入式. 二.为Xcode编译POCO C+ ...
- OpenMVS+Win10+VS2019+vcpkg编译及问题
Win10 + VS2019 + OpenMVS1.1.1 + Vcpkg 1 VS2019安装 2 git安装 3 vcpkg安装 3.1下载vcpkg 3.2安装vcpkg 3.3 配置环境变量 ...
- 编译-C语言库FFTW支持iOS平台的静态库
// 查看xcode 的版本 $:xcodebuild -version Xcode 10.2.1 Build version 10E1001 FFTW:傅立叶变换常用库–fftw FFTW官网:ht ...
- 从源码编译InfluxDB
操作系统 : CentOS7.3.1611_x64 go语言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 go语言安装参考: http://www.cnblogs.com ...
- mysql netcdf_Linux下用Intel编译器编译安装NetCDF-Fortan库(4.2以后版本)
本来这个问题真的没必要写的,可是真的困扰我太久%>_ 首先,最权威清晰的安装文档还是官方的: 那这个文档最开始就告诉我们,自NetCDF库4.2版本以后,Fortran的库和C的库就要分开bui ...
- FFmpeg编译出来的库太大?试试这几招
目录 前言 一.编译出来的库为什么大? 二.去掉多余的格式 三.--enable-small 前言 之前合成Mp4的项目功能已经完成了,在实际测试的时候发现一个问题,就是编译出来的几个库文件加起来太大 ...
- 利用CMake编译OpenCV-4.1.2源码,使其可以在VS2012下进行图像处理开发的记录(因缺少OpenBLAS未成功)
目前,OpenCV已经发展到OpenCV4.X了. OpenCV是以CMake 作为项目架构系统的开源项目. 在OpenCV4中,只为我们CMake编译好了64位的适用于vc14(Visual Stu ...
最新文章
- 智能猫窝是如何诞生的?详解百度大脑的开放生态
- 【转】如何在github上fork一个项目来贡献代码以及同步原作者的修改 -- 不错
- 数据库学习(MySQL):JDBC的简单增删改查实现
- JS里面的懒加载(lazyload)
- imageloader图片基本加载
- 计算机应用基础课程是过程化考试吗,基于能力的计算机应用基础课程过程化考核标准构建与实施.doc...
- 【转】 Oracle中分区表的使用
- Python+OpenCV:理解k近邻(kNN)算法(k-Nearest Neighbour (kNN) algorithm)
- 使用Secure Boot后,导致VMware无法启动虚拟机
- 详解如何正确使用Tuxera NTFS For Mac软件
- 基于公司云平台的素材归档系统(一)
- java spring 连接池配置_Spring中常用的连接池配置
- 大数据采集入门——网络爬虫技术——Selenium
- mac安装绿联USB转以太网驱动
- linux下动态库的符号冲突、隐藏和强制优先使用库内符号
- CCTM_FormElement 类
- Vue安装element ui踩坑
- Dream_Chaser队训练赛第一场 I题
- 转载:深入学习java源码之Callable.call()与Future.get()
- 鱼眼镜头/全景相机原理/全景相机标定