中国用户使用vcpkg时的常见问题及解决办法
vcpkg 是一个开源的 C++ 包管理器,让你可以轻松安装和管理 C++ 库。然而,对于中国的用户来说,可能会遇到以下一些常见问题。
本文档仅包含中国用户在配置使用 vcpkg 时遇到的常见问题及解决方法。vcpkg 的使用方法请参看官方文档 官方文档。
1. GitHub 访问失败
由于vcpkg没有预安装包,需要直接从GitHub下载源码.但是因为以下原因可能会导致国内用户无法访问GitHub或者访问速度较慢:
a. GitHub的服务器位于美国,由于物理距离的原因导致访问速度较慢。
b. 中国的网络审查和防火墙会对GitHub的一些特定的服务进行封锁(如avatars0.githubusercontent.com、camo.githubusercontent.com 等用于加载图片和其他资源的域名),导致访问失败。
c. GitHub作为全球范围内的服务,网站本身存在一些稳定性的问题。
解决方法:
1. 使用代理或者VPN服务。
如果使用代理还是无法访问Github,可以将本地的DNS更改为国内常用的一些公共DNS地址.
2. 更新DNS地址
此方法针对国内的CDN域名遭到DNS污染,导致无法使用GitHub的情况。我们默认从目标网址的最近CDN节点获取内容, 但当节点过远或者DNS指向错误地址错误时,就会造成访问过慢或者失败. 注:DNS污染指:一些刻意或者无意创造出来的数据包,把域名指向不正确的IP地址。
a. 使用工具来确定Ping通的GIitHub的IP地址。
打开 http://ping.chinaz.com/ ,输入github.com点击Ping检测。
稍等几秒后会显示测试结果:
从图中我们可以看出一共测试了95个节点, 包括各个服务商的最快和最慢地区节点。 注意下面的复选框有一个独立IP,这里显示的IP地址就是你本地可以访问的GitHub的IP地址,当然这个IP地址是通过DNS解析的。可以手动Ping这些IP来查看哪一个响应最快。
b. 刷新DNS的缓存
首先进入网址 https://github.com.ipaddress.com/ ,查看GitHub的IP地址 140.82.114.4
点击地址查看详情:
然后进入网址 https://sites.ipaddress.com/fastly.net/ 来确定域名IP
最后在再进入网址 https://sites.ipaddress.com/github.com/ 来确定GitHub的静态IP
在我们拿到这些IP地址后,打开目录 C:\Windows\System32\drivers\etc 找到hosts文件并打开它
在文件的底部加入获取到的IP地址的内容,即:
140.82.114.4 github.com
151.101.1.6 github.global.ssl.fastly.net
151.101.65.6 github.global.ssl.fastly.net
151.101.129.6 github.global.ssl.fastly.net
151.101.193.6 github.global.ssl.fastly.net
14.82.114.4 assets-cdn.github.com
保存并退出。注意这里需要使用管理员权限!
最后我们刷新DNS缓存, 打开CMD,输入 ipconfig/flushdns
2. 使用国内镜像
vcpkg 针对于中国用户还提供了一个可使用的国内镜像 http://106.15.181.5。
使用方法:
设置环境变量:X_VCPKG_ASSET_SOURCES
,值为:x-azurl,http://106.15.181.5
设置完成后重新执行脚本 bootstrap
即可。
3. 中文语言包导致的路径问题
部分中国用户习惯性使用中文的路径作为vcpkg的根目录,这有可能会导致的路径解析错误,纯英文路径和vs英文语言包是使用vcpkg的必要条件之一。
根本原因:在计算机中对于非拉丁文字符表示,不同的编码可能会使用完全不同的值来表示一个字符。因此当一个字符串从一个地方传递到另一个地方时,如果两个地方的编码形式不同则会导致这个字符串被错误的解析。例如 C:\Users\ÌÆ¿\AppData\,因为编码不一致导致中文路径显示为一堆不可读的字符。
解决方法:使用纯英文路径并安装VS英文语言包。
4. 默认系统 utf-8 的文件系统问题
根据 Windows 的不同区域导致的语言问题:
The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss.
如果出现这个问题,请将你的 Windows 语言区域设置为 English。