C++ 包管理工具 vcpkg 配置国内镜像源

第一部分:配置国内镜像源

1.1 方法一:使用环境变量(推荐)

设置镜像源环境变量:

# 设置清华镜像源$env:VCPKG_DOWNLOAD_MIRROR="https://mirrors.tuna.tsinghua.edu.cn/github-release/ninja-build/ninja/"$env:X_VCPKG_ASSET_SOURCES="x-azurl,https://mirrors.tuna.tsinghua.edu.cn/vcpkg/assets/"# 或者使用中科大镜像源$env:VCPKG_DOWNLOAD_MIRROR="https://mirrors.ustc.edu.cn/github-release/ninja-build/ninja/"$env:X_VCPKG_ASSET_SOURCES="x-azurl,https://mirrors.ustc.edu.cn/vcpkg/assets/"

1.2 方法二:修改 vcpkg 配置文件

在 vcpkg 根目录创建或修改 triplets\x64-windows.cmake 文件,添加:

# 在文件末尾添加以下内容 set(VCPKG_DOWNLOAD_MIRROR "https://mirrors.tuna.tsinghua.edu.cn/github-release/ninja-build/ninja/") set(X_VCPKG_ASSET_SOURCES "x-azurl,https://mirrors.tuna.tsinghua.edu.cn/vcpkg/assets/") 

第二部分:完整的解决方案

2.1 一次性解决方案

# 1. 设置镜像源环境变量$env:VCPKG_DOWNLOAD_MIRROR="https://mirrors.tuna.tsinghua.edu.cn/github-release/ninja-build/ninja/"$env:X_VCPKG_ASSET_SOURCES="x-azurl,https://mirrors.tuna.tsinghua.edu.cn/vcpkg/assets/"# 2. 设置代理(如果你有代理的话)# $env:HTTP_PROXY="http://127.0.0.1:10809"# $env:HTTPS_PROXY="http://127.0.0.1:10809"# 3. 先单独安装 ninja(解决你当前的错误).\vcpkg.exe install ninja:x64-windows # 4. 然后再安装 opencv4.\vcpkg.exe install opencv4:x64-windows 

2.2 永久配置方案

创建 set-mirror.ps1 脚本文件:

# set-mirror.ps1 - 设置vcpkg镜像源echo"设置vcpkg国内镜像源..."# 设置环境变量(当前会话有效)$env:VCPKG_DOWNLOAD_MIRROR="https://mirrors.tuna.tsinghua.edu.cn/github-release/ninja-build/ninja/"$env:X_VCPKG_ASSET_SOURCES="x-azurl,https://mirrors.tuna.tsinghua.edu.cn/vcpkg/assets/"# 设置HTTP代理(如果有的话,取消注释并修改)# $env:HTTP_PROXY="http://127.0.0.1:10809"# $env:HTTPS_PROXY="http://127.0.0.1:10809"echo"镜像源设置完成!"echo"VCPKG_DOWNLOAD_MIRROR = $env:VCPKG_DOWNLOAD_MIRROR"echo"X_VCPKG_ASSET_SOURCES = $env:X_VCPKG_ASSET_SOURCES"# 测试下载.\vcpkg.exe search opencv4 

第三部分:手动下载解决方案

3.1 手动下载 ninja

如果镜像源还是不行,可以手动下载:

  1. 手动下载 ninja
    • 访问:https://github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-win.zip
    • 或者从国内镜像:https://mirrors.tuna.tsinghua.edu.cn/github-release/ninja-build/ninja/v1.13.1/ninja-win.zip
  2. 放置文件
    • 将下载的 ninja-win.zip 放到 E:\YOLO\cpp\vcpkg-master\downloads\
    • 重命名为:ninja-win-1.13.1.zip
  3. 重新运行安装
.\vcpkg.exe install opencv4:x64-windows 

第四部分:分步安装策略

由于 OpenCV 依赖很多,建议分步安装:

# 1. 先安装基础依赖.\vcpkg.exe install zlib:x64-windows .\vcpkg.exe install libjpeg-turbo:x64-windows .\vcpkg.exe install libpng:x64-windows .\vcpkg.exe install libwebp:x64-windows # 2. 安装编译工具.\vcpkg.exe install ninja:x64-windows # 3. 安装其他依赖.\vcpkg.exe install protobuf:x64-windows .\vcpkg.exe install flatbuffers:x64-windows # 4. 最后安装 opencv.\vcpkg.exe install opencv4:x64-windows 

第五部分:使用预编译二进制文件

如果编译时间太长,可以考虑使用预编译的 OpenCV:

5.1 直接下载 OpenCV 预编译版本

  1. 访问 OpenCV官网
  2. 下载 Windows 版本(例如 opencv-4.11.0-windows.exe
  3. 解压到 C:\opencv
  4. 在 Visual Studio 中手动配置

5.2 手动配置 OpenCV

// 简单的测试程序#include<opencv2/opencv.hpp>#include<iostream>intmain(){ std::cout <<"手动配置OpenCV测试"<< std::endl;// 创建一个简单的图像 cv::Mat image(300,400, CV_8UC3, cv::Scalar(100,150,200)); cv::circle(image, cv::Point(200,150),50, cv::Scalar(0,0,255),-1); cv::imshow("手动配置测试", image); cv::waitKey(0);return0;}

第六部分:验证安装

安装成功后,创建测试文件:

// test_opencv.cpp#include<opencv2/opencv.hpp>#include<iostream>intmain(){ std::cout <<"OpenCV安装测试"<< std::endl; std::cout <<"OpenCV版本: "<< CV_VERSION << std::endl;// 测试基本功能 cv::Mat image = cv::imread("test.jpg");if(image.empty()){ std::cout <<"创建测试图像..."<< std::endl; image = cv::Mat(400,600, CV_8UC3, cv::Scalar(50,100,150)); cv::circle(image, cv::Point(300,200),80, cv::Scalar(0,255,0),-1); cv::putText(image,"OpenCV Works!", cv::Point(150,100), cv::FONT_HERSHEY_SIMPLEX,1.2, cv::Scalar(255,255,255),2);} cv::imshow("OpenCV测试", image); cv::waitKey(0);return0;}

总结建议

  1. 首选方案:使用环境变量设置清华镜像源
  2. 备用方案:手动下载 ninja 等工具
  3. 快速方案:直接下载 OpenCV 预编译版本
  4. 耐心等待:第一次编译 OpenCV 可能需要较长时间

Read more

【C++】继承

【C++】继承

目录 一. 概念 二. 基类和派生类对象赋值转换 三. 继承中的作用域 四. 派生类的默认成员函数 1. 构造函数 2. 拷贝构造 3. 赋值重载 4. 析构函数 五. 继承与友元 六. 继承与静态成员 七. 多继承、菱形继承、菱形虚拟继承 虚拟继承解决数据冗余和二义性的原理 八. 继承和组合 一. 概念 继承是类设计层次的复用 语法:Person是父类,也称作基类。Student是子类,也称作派生类 继承关系和访问限定符: 继承以后,保护和私有不一样了 1. 不可见:基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面,都不能去访问它。基类的私有成员在基类中还是能用,在基类外不能用 2. 如果基类成员不想在类外直接被访问,但需要在 派生类中能访问,

By Ne0inhk
【Linux系统编程】第二十八弹---构建基础文件操作库与理解标准错误流(stderr)在C与C++中的应用

【Linux系统编程】第二十八弹---构建基础文件操作库与理解标准错误流(stderr)在C与C++中的应用

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C++详解】【Linux系统编程】 目录 1、封装简单的库 1.1、定义文件结构 1.2、打开文件 1.3、刷新缓冲区 1.4、写文件 1.5、关闭文件 1.6、各文件代码  2、stderr 2.1、C语言代码演示 2.2、C++代码演示 1、封装简单的库 1.1、定义文件结构 #define LINE_SIZE 1024 #define FLUSH_NOW

By Ne0inhk
“深入浅出”系列之C++:100个C++开源项目

“深入浅出”系列之C++:100个C++开源项目

1.C++服务器 项目地址:https://github.com/yuesong-feng/30dayMakeCppServer 2.《btop》(命令行资源监视器) 项目地址:https://github.com/aristocratos/btop 3.C++轻量级WebServer服务器 项目地址:https://github.com/qinguoyi/TinyWebServer 4.剪贴板工具 项目地址:https://github.com/Slackadays/Clipboard 5.dbg 项目地址:https://github.com/sharkdp/dbg-macro 6.计算机操作系统 项目地址:https://github.com/SamyPesse/

By Ne0inhk
C++ 继承入门(上):从基础概念定义到默认成员函数,吃透类复用的核心逻辑

C++ 继承入门(上):从基础概念定义到默认成员函数,吃透类复用的核心逻辑

🔥小叶-duck:个人主页 ❄️个人专栏:《Data-Structure-Learning》 《C++入门到进阶&自我学习过程记录》《算法题讲解指南》--从优选到贪心 ✨未择之路,不须回头 已择之路,纵是荆棘遍野,亦作花海遨游 目录 前言 一. 继承的概念与定义   1、继承的核心概念   2、继承的定义格式   3、继承方式与成员访问权限 二. 基类与派生类的转换:子类对象能当父类用吗? 三. 继承中的作用域:同名成员会冲突吗?   1、变量隐藏   2、函数隐藏 四、派生类的默认成员函数:构造、拷贝、析构怎么写?   1、构造函数:先调用父类构造,再初始化子类成员   2、拷贝构造:先拷贝父类,再拷贝子类   3、 赋值重载:

By Ne0inhk