vcpkg踩坑记录

news2024/11/8 18:39:28

接触了vcpkg一段时间, 感觉在包管理方面确实很有帮助, 然而在使用中, 也碰到了各种各样的问题, 总结记录一下.

vcpkg github: https://github.com/Microsoft/vcpkg

快速使用指南

To get started:

> git clone https://github.com/Microsoft/vcpkg.git(也可以从下载地址直接下载安装包压缩文件, 建议使用git, 后面会用到)

> cd vcpkg

Windows> .\bootstrap-vcpkg.bat

Linux:~/$ ./bootstrap-vcpkg.sh

Then, to hook up user-wide integration, run (note: requires admin on first use)

Windows> .\vcpkg integrate install

Linux:~/$ ./vcpkg integrate install

Install any packages with

Windows> .\vcpkg install sdl2 curl

Linux:~/$ ./vcpkg install sdl2 curl

常见错误汇总

windows

1. .\vcpkg integrate install失败,报错 Error: failed to copy targets file to C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\ImportBefore\Default\vcpkg.system.props

原因:如果以管理员身份打开cmd后出现这个报错,是因为Default目录下面没有vcpkg.system.props文件夹,手动创建该文件夹后操作成功。

猜测根本原因:看这一句requires admin on first use,意思应该是在编译的时候就以管理员身份打开cmd,这样就不会出现上面的错误,目前按照这个做法还没有出现上面的错误

Linux

1. ./bootstrap-vcpkg.sh失败

此脚本首先会安装cMake,要安装cMake需要系统中有gcc-c++,而且版本不低于7,不然就会安装失败。常规yum安装(yum install gcc-c++)的安装版本可能会低于7,可以尝试:

        On Ubuntu try the following:

                sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y

                sudo apt-get update -y

                sudo apt-get install g++-7 -y

        On CentOS try the following:

                sudo yum install centos-release-scl

                sudo yum install devtoolset-7

                scl enable devtoolset-7 bash

2. vcpkg需要git2.0以上版本,centOS下面yum安装默认都是1.0版本的,可以考虑下面的方式:

yum install http://opensource.wandisco.com/centos/6/git/x86_64/wandisco-git-release-6-1.noarch.rpm

yum install git

如果再bower时出现SSL connect error,执行 git config --global http.sslversion tlsv1

3. ./vcpkg integrate install 报错: write_contents("/root/.vcpkg/vcpkg.path.txt"): No such file or directory.

可能脚本没有权限创建这个目录导致的错误, 可以手动创建这个目录, 再创建这个文件解决:

        mkdir /root/.vcpkg

        touch /root/.vcpkg/vcpkg.path.txt

        然后再重新执行所有安装命令

4. ./vcpkg install package时报错: error: vcpkg was unable to detect the active compiler's information. See above for the CMake failure output.

可能的原因是需要系统中有gcc-c++,而且版本不低于7, 然后安装过后不会默认启用, 所以可以先手动执行一下命令 scl enable devtoolset-7 bash 来启用它. 然后 scl enable devtoolset-7 bash似乎只能支持当前连接,关闭重开后就失效了,需要重新输入,看看怎么能够默认启用吧.

使用问题

1. 如何安装指定版本的包

想要安装指定版本的包, 需要把你的vcpkg仓库checkout到和这个包相符的commit上.

以protobuf为例, 首先使用下面的命令来查找相符的commit:

git log --color=always --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad)' --date=short | grep --color=never protobuf

可以看到类似的信息: b1fea4588 - [protobuf] update to 3.5.1 (2018-01-31)

checkout: git checkout b1fea4588

运行 vcpkg install protobuf

注: 未来官方可能会出官方解决方案来解决这个问题

2. vcpkg目录下的downloads子目录是安装包时的缓存目录,如果使用命令行安装包时,有某些包下载不下来导致报错,可以手动下载后,放到这个目录下面,就可以继续安装了。

3. visual studio IDE需要安装英文语言包才能支持vcpkg下载的包,安装方法是使用vs安装文件,然后在功能里选择语言,找到english,选择安装即可。

4. vcpkg安装了依赖库后,其相关文件会存入在installed文件夹下,编译平台不一样,目录就不一样,windows系统下x86平台会放在x86-windows目录内,x64平台会放到x64-windows目录内,在编译项目时,如果发现安装了对应的库,结果提示找不到库文件,可以先检查一下编译平台是x86还是x64,vcpkg默认安装32位的库,为了让它安装64位的库,添加系统环境变量:VCPKG_DEFAULT_TRIPLET=x64-windows(这个怎么设置目前还没有试过,因为还没用到),也可以在安装时指定平台:vcpkg install libmysql:x64-windows。可以在bin中找到dll文件,lib文件夹下找到lib文件,Debug中可以找到对应的debug版本文件,tools中可以找到依赖库的相关工具,比如protoc.exe就放在installed/x86-windows/tools/protobuf目录下。

5. vcpkg安装了protobuf后,编译时会报找不到libprotobuf.lib文件,这个可以在项目中添加预编译命令PROTOBUF_USE_DLLS来解决,添加了这个命令后,编译时将不再使用libprotobuf.lib文件,而是改用动态链接方式,在运行中使用对应的dll文件。应当使用这种动态链接的方式,采用这种方式后,对应编译方式的dll文件会自动拷贝到目标文件夹下,比如debug模式下,就会把libprotobufd.dll放到生成目录下,不需要再手动拷贝了。

6. 截止到2021-8-5日,一些库vcpkg不能完全支持

libmysql

不支持x86,仅支持x64

安装x64版本时, 也会报错, 需要手动安装依赖, 在centos环境下, 需要执行下列命令:

        yum install python3

        yum install autoconf

        yum install automake

        yum install autoconf-archive

linux环境下, 如果使用源码安装这个库, 可能会碰到错误: CMake Error: Curses library not found. Please install appropriate package, 解决方法:

源码安装MySQL或者mariadb的时候,在cmake的时候会遇到各种报错。

遇到 Curses library not found. Please install appropriate package 是其中一种报错

原因:是因为没有安装依赖,使用yum安装一下即可。(要根据提示的依赖名,在安装的时候后面增加-devel)
yum -y install ncurses-devel
如果还遇到其他报错,只需要根据报错的提示来安装对应的依赖,比如上面的报错提示是让你安装curses,所以需要装ncurses-devel这个环境依赖,然后再次cmake就行了

镜像

使用vcpkg安装包时,经常会出现下载失败的问题, 可以采用镜像下载, 镜像地址为

http://106.15.181.5

以下为使用方法:

设置环境变量:

X_VCPKG_ASSET_SOURCES

值为:

x-azurl,http://106.15.181.5/

并确保你的vcpkg为最新的(重新执行bootstrap脚本)即可。

 若clone vcpkg的速度过慢,可使用gitee的fork:

JackBoosY/vcpkg​gitee.com

若在Windows中下载vcpkg.exe(通过bootstrap脚本)过慢,可使用以下链接手动下载:

https://gitee.com/jackboosy/vcpkg-tool/attach_files/746777/download/vcpkg.exe​gitee.com

并放到vcpkg根目录中。对于此exe的安全性请各位放心,该exe包含微软证书。

此mirror上的缓存包不完整,可能有一些包没有上传,烦请在gitee上提issue申请:

Issues · JackBoosY/vcpkg - Gitee.com​gitee.com

若有其他问题,亦可在gitee上提issue。

再次推广下国内官博:

vcpkg - 博客园

解决GitHub网页githubusercontent地址无法访问问题

在下载包时,有时会遇到无法连接到raw.githubusercontent.com的问题,可以参考下面的方法.

GitHub里面图片都在githubusercontent.com域名上,我们只需要在hosts里面加上相关地址即可。如果你有代理,把域名加入到许可名单也可以的。

这里我们介绍hosts方式是如何使用的,把以下内容添加到hosts文件中。

1. hosts内容

# 2020年12月30日更新

# GitHub Start
52.74.223.119     github.com
52.74.223.119   gist.github.com
54.169.195.247   api.github.com
185.199.111.153   assets-cdn.github.com
199.232.96.133    raw.githubusercontent.com
199.232.96.133    gist.githubusercontent.com
199.232.96.133    cloud.githubusercontent.com
199.232.96.133   camo.githubusercontent.com
199.232.96.133   avatars0.githubusercontent.com
199.232.96.133    avatars1.githubusercontent.com
199.232.96.133   avatars2.githubusercontent.com
199.232.96.133    avatars3.githubusercontent.com
199.232.96.133    avatars4.githubusercontent.com
199.232.96.133    avatars5.githubusercontent.com
199.232.96.133    avatars6.githubusercontent.com
199.232.96.133    avatars7.githubusercontent.com
199.232.96.133    avatars8.githubusercontent.com
199.232.96.133  user-images.githubusercontent.com
185.199.109.154   github.githubassets.com
# GitHub End

注意 : 这里域名对应的ip是通过dns查询工具查询得到的,你应当选择的是延时相对较小且比较稳定的ip。

如果发现不起作用,或者速度不理想,参考"查找域名IP"。

2. 如何修改

        2.1 Windows

                hosts文件位置:C:/windows/system32/drivers/etc/hosts。

                将前文内容追加到hosts,然后刷新DNS缓存:

                        ipconfig /flushdns

        2.2 Mac

                hosts文件位置:/etc/hosts。

                Mac系统下修改需要按照如下方式:

                        1:首先,打开(访达)Finder。

                        2:使用组合键Shift+Command+G打开"前往文件夹",在输入框输入/etc/hosts。

                        3:然后就会跳转到hosts文件位置。

                复制hosts文件到桌面上,鼠标右键点击/右击它,选择「打开方式」—「文本编辑」,打开这个hosts文件,然后将你要修改的内容直接在里面修改就好了。

                然后把你修改好的hosts文件在复制回hosts文件的所在(文件夹下)路径:/etc/hosts 之下替换原始的hosts文件就好了。

                注意:如果弹出密码输入框,你需要输入你当前电脑登录账号的密码。

                最后刷新下缓存:

                        sudo killall -HUP mDNSResponder

3. 查找域名IP

  • DNS查询-站长工具
  • IP或域名查询-查询网
  • IPAddress.com

注:2020年12月30日我实际使用 IPAddress 才可以生效,前面两个查询站点获取的 IP 均无法使用,各位可以都尝试下直到生效。

前面hosts里面域名里分为两类:

  • .http://githubusercontent.com
  • .http://github.com

*.githubusercontent.com可以使用同一个IP,不需要每个单独查询。*.github.com未经测试,目前看是需要单独查询对应的IP。

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

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

相关文章

C语言—局部变量和全局变量

不同函数之间定义的变量是无法相互进行访问的&#xff1b; #include <stdio.h>void Test();int main() {int a 100;printf("%d", b); }void Test() {int b 200;printf("%d", a); } 在main函数中无法访问到Test中的变量b&#xff0c;同样&#xff…

2022吴恩达机器学习课程——第三课(非监督学习)

注&#xff1a;参考B站视频教程 视频链接&#xff1a;【(强推|双字)2022吴恩达机器学习Deeplearning.ai课程】 写在前面&#xff1a;文章只是为了记录学习课程的整个过程&#xff0c;方便以后查漏补缺&#xff0c;方便找到对应章节&#xff0c;希望看到这篇文章的同学能够认真的…

Numpy+PIL实现图片的自由旋转

1.内容简介 使用PIL和Numpy编程实现图片的自由旋转。 2.技术要点 &#xff08;1&#xff09;用Python PIL库将图片读取为NumPy 数组。 &#xff08;2&#xff09;采用旋转后图像幅面放大的图像旋转变换方式&#xff0c;根据旋转角度和原图像尺寸计算图像像素点的旋转变换矩阵…

MySQL中 java 的 JDBC 编程使用方法及驱动包的下载和使用

文章目录1.简介2.JDBC 的使用2.1 先安装对应数据库的驱动包~~2.2 把安装好的 jar 驱动包导入到项目中~~2.2.1 在项目中创建目录&#xff0c;把 jar 包拷贝进来。2.2.2 右键创建的目录3.编写数据库代码插入一个记录4.查看插入记录后的数据表5.如何编写代码实现查找操作1.简介 实…

数据库实验2 数据库安全性定义与检查

前言&#xff1a;记得验收时问了一个问题吧&#xff0c;就是用户和角色的区别是什么 实验2.1自主存取控制实验 1.实验目的 掌握自主存取控制权限的定义和维护方法。 2.实验内容和要求 定义用户、角色,分配权限给用户、角色,回收权限,以相应的用户名登录数据库验证权限分配…

分享巧记Linux命令的方法

最近有些学弟经常私信问我说&#xff0c;他们自己是Linux方面的小白&#xff0c;对于Linux的命令了解十分的少&#xff0c;虽然每次跟着我推荐的学习视频教程可以进行操作&#xff0c;但是离开了视频&#xff0c;就又是两眼抓瞎&#xff0c;什么也想不起来。不知道怎么样通过命…

【数据结构】队列与Queue接口

目录 一、队列 二、 Java里的Queue接口 1、概述 2、常用方法 1.入队 2.出队 3.获取队首元素 4、判空 三、单链表实现队列 1、准备字段 2、实现入队 3、实现出队 4、实现获取队首元素 5、实现判空 四、循环队列的实现 1、前言 2、字段准备 3、实现入队 4、实现…

一致性哈希

一、简介 这个算法是一种特殊的哈希算法&#xff0c;目的是解决分布式缓存的问题。 普通哈希算法在分布式存储具有较大的局限性&#xff0c;简单的讲就是难以扩展。 一致性哈希相对而言具有较好的容错性和可扩展性&#xff0c;更加适合现在的分布式存储。 二、经典哈希版本 …

SpringBoot+Vue项目实践课程教学管理平台

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

✿✿✿JavaScript --- JSON

目录 1.JSON的简介 2.JSON的语法规则 3.JSON 字符串转换为 JavaScript 对象 4.常用的JSON相关的函数 5.JSON对象的遍历 6.补充&#xff1a;JS中的this关键字 1.JSON的简介 JSON&#xff08; JavaScript Object Notation &#xff09; 是用于存储和传输数据的格式&#xf…

Android studio配置大内存,编译速度更快!

本文使用的是windows 10系统&#xff0c;Android studio 版本是Android Studio Chipmunk | 2021.2.1&#xff08;松鼠&#xff09; 目录为什么要配置大内存&#xff1f;默认内存是多少&#xff1f;如何扩大内存配置&#xff1f;这个配置保存在哪个文件&#xff1f;文件在哪里&a…

二叉树10:二叉树的最小深度

主要是我自己刷题的一些记录过程。如果有错可以指出哦&#xff0c;大家一起进步。 转载代码随想录 原文链接&#xff1a; 代码随想录 leetcode链接&#xff1a;111. 二叉树的最小深度 题目&#xff1a; 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近…

Asp.Net Core实现最基本的Http服务

概述 和.NetFramework时代不同&#xff0c;Core是可以自承载的&#xff0c;也就说开发好的Web项目&#xff0c;可以打包成exe直接运行的&#xff0c;而不必放到IIS这样的环境中。接下来&#xff0c;我们写点代码&#xff0c;体验一下Asp.Net Core自带的Http功能。 初体验 所谓…

嵌入式微功耗RTU的功能与特点介绍、技术参数详情

平升电子嵌入式微功耗RTU&#xff0c;可灵活嵌入至各类仪表、传感器和工业设备中&#xff0c;定时采集设备数据并通过4G/5G/NB-IoT远传至监管软件&#xff0c;实现设备联网。 嵌入式微功耗RTU设计小巧、方便集成&#xff0c;微功耗运行&#xff0c;支持标准水资源/水文/环保/M…

Biotin-PEG-AC,Biotin-PEG-Acrylate,生物素PEG丙烯酸酯线性杂双功能PEG试剂

英文名称&#xff1a;Biotin-PEG-AC&#xff0c;Biotin-PEG-Acrylate 中文名称&#xff1a;生物素-聚乙二醇-丙烯酸酯 生物素-聚乙二醇-丙烯酸酯是一种含有生物素和丙烯酸酯的线性杂双功能聚乙二醇试剂。它是一种有用的带有PEG间隔基的交联或生物结合试剂。生物素能与亲和素和…

智创万物,数赢未来——如何助推数智时代的发展浪潮

数智化核心特征 可视化 消费者的行为可以看得见&#xff0c;生产者的行为也可以看得见。产业互联网或者消费互联网非常重要的一点就是要对消费者行为和生产者行为的可视化&#xff0c;其背后是数字化的力量。 可量化 可量化意味着企业家可以对管理流程进行改造&#xff0c;…

echarts的legend——图例样式的配置

认识图例&#xff1a; 以上几张图表中&#xff0c;红色圆圈部分即图例 echarts图表中的图例&#xff0c;有形状&#xff0c;颜色&#xff0c;位置等等各种样式的不同配置。 echarts官网配置项手册里有非常详细的内容&#xff0c;我们挑几种常用的看看&#xff0c;加深对legend属…

深度学习——物体检测算法:R-CNN,SSD,YOLO(笔记)

一&#xff0c;R-CNN 1.区域卷积神经网络R-CNN 首先从输入图像中提取若干个锚框&#xff0c;并标注好它们的类别和偏移量。然后用卷积神经网络对每一个锚框进行前向传播抽取特征。最后用每个提议区域的特征来预测类别和边界框。 ①使用启发式搜索算法来选择锚框 ②使用预训练…

【第一周学习——认识 O(N*logN) 的排序[ 归并排序 、堆排序、快速排序 ]

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd;个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;《数据结构与算法》 &#x1f4e7;如果文章知识点有错误的地方&a…

力扣(LeetCode)187. 重复的DNA序列(C++)

哈希表 直观思考&#xff0c;由于限定了答案长度 101010 &#xff0c;只需要一次遍历字符串&#xff0c;统计所有长度为 101010 的子串的出现次数(哈希表) &#xff0c;最后遍历哈希表&#xff0c;维护答案&#xff0c;记录出现 222 次(及以上)的字符串 。 class Solution { …