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++第五十一弹---IO流实战:高效文件读写与格式化输出

C++第五十一弹---IO流实战:高效文件读写与格式化输出

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C++详解】 目录 1. C语言的输入与输出 2. 流是什么 3. C++IO流 3.1 C++标准IO流 3.2 C++文件IO流 3.2.1 以写方式打开文件 3.2.1 以读方式打开文件 4 stringstream的简单介绍 1. C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是 scanf () 与 printf() 。 scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度输出控制。C语言借助了相应的缓冲区来进行输入与输出。

By Ne0inhk
【Linux/C++多进程篇(一) 】一个变两个?揭秘 C/C++ 程序中神奇的“分身术”

【Linux/C++多进程篇(一) 】一个变两个?揭秘 C/C++ 程序中神奇的“分身术”

⭐️在这个怀疑的年代,我们依然需要信仰。 个人主页:YYYing. ⭐️Linux/C++进阶系列专栏:【从零开始的linux/c++进阶编程】 ⭐️其他专栏:【linux基础】【数据结构与算法】【从零开始的计算机网络学习】 系列上期内容:【Linux/C++文件篇(一) 】标准I/O与文件I/O基础  系列下期内容:【Linux/C++多进程篇(二) 】万字解析linux系统编程之进程间通信 (IPC) 目录 前言:        多进程理论基础 一、为什么要引入多进程 二、多进程相关概念 三、进程的内存管理 四、进程与程序的区别 五、进程的种类 六、进程PID 七、特殊的进程 八、linux中有关进程的指令 九、进程状态的切换

By Ne0inhk
【Linux】线程池(一)C++ 手写线程池:基于策略模式实现高性能日志模块

【Linux】线程池(一)C++ 手写线程池:基于策略模式实现高性能日志模块

文章目录 * 池化技术 * 线程池的日志模块 * 日志与策略模式 * 日志模块 * 两个核心问题 * 设计文件等级 * 刷新策略 * 获取日志时间 * logger类实现 * 内部类LogMessage实现 * 日志刷新流程图及源码 池化技术 池化技术可以减少很多的底层重复工作,例如创建进程、线程、申请内存空间时的系统调用和初始化工作,例如线程池,先预先创建好一些线程,当任务到来时直接将预先创建好的线程唤醒去处理任务,效率会远远高于任务到来时临时创建线程。例如内存池,但我们要用1mb空间时内存池会一次性申请20mb空间,效率会远远高于用多少空间申请多少空间(申请空间会调用系统调用)。 线程池是执行流级别的池化技术,STL中的空间配置器和内存池是内存块管理级别的池化技术。 线程池的日志模块 下⾯开始,我们结合我们之前所做的所有封装,进⾏⼀个线程池的设计。在写之前,我们要做如下准备。 * 准备线程的封装 * 准备锁和条件变量的封装 * 引⼊日志,对线程进⾏封装 日志与策略

By Ne0inhk
【C++初阶】C++入门相关知识(2):输入输出 & 缺省参数 & 函数重载

【C++初阶】C++入门相关知识(2):输入输出 & 缺省参数 & 函数重载

🎈主页传送门:良木生香 🔥个人专栏:《C语言》 《数据结构-初阶》 《程序设计》《鼠鼠的C++学习之路》 🌟人为善,福随未至,祸已远行;人为恶,祸虽未至,福已远离 上期回顾:在上一篇文章中,我们对C++进行了初步的认识,学习了C++的发展历史,第一个C++程序以及命名空间,我们知道,C++的出现就是为了改进和完善C语言的不足,使得程序更加高效,程序员编写起来更加方便快捷,那么本篇文章我们继续往下认识C++的入门相关知识 目录 一、C++的输入&输出 1.1、核心载体:头文件 1.2、核心的IO对象:cin与cout 1.2.1、std::cin 标准输入流 1.

By Ne0inhk