Quick get started with vcpkg, windows visual studio | CPP

本文属于 C++ 系列文章,本篇文章,是在 Quickstart C++ with cmake, visualstudio | CPP 基础上,继续的。

目录

    • vcpkg
    • 总结
    • 安装
      • 安装 mingw64
      • 安装 vcpkg
    • 创建项目
    • 查询已有的包
    • 在 Visual Studio 中调试
    • 发布依赖
    • Trouble Shooting
      • CMake Error: CMake was unable to find a build program corresponding to "Ninja"
      • No CMAKE_CXX_COMPILER could be found
    • Links

vcpkg

vcpkg 是 C++ 项目的包管理工具,类似于 pip 之于 Python, npm 之于 Node.js, maven 之于 Java.

总结

  • Windows 11 上使用了 MSVC 兼容性没有 mingw64 好,配置 MSVC 花了好长时间没弄好,转而使用 mingw64 很快就配置好了
  • Visual Studio 使用体验很好
  • 以下脚本是在 C:\devel\msys64\mingw64.exe 控制台下执行
  • GitHub, 本文中的代码放在了 Repo https://github.com/hailiang-wang/vcpkg-visualstudio-quickstart

安装

安装 mingw64

Using GCC with MinGW

https://code.visualstudio.com/docs/cpp/config-mingw

安装 vcpkg

https://learn.microsoft.com/en-us/vcpkg/users/platforms/mingw

https://learn.microsoft.com/en-us/vcpkg/get_started/get-started-vs?pivots=shell-powershell

# 首先,进入 mingw64
export VCPKG_DEFAULT_TRIPLET=x64-mingw-static
export VCPKG_DEFAULT_HOST_TRIPLET=x64-mingw-static

git clone https://github.com/microsoft/vcpkg.git
cd vcpkg

export PATH=/c/Windows/System32/WindowsPowerShell/v1.0:$PATH
sh ./bootstrap-vcpkg.sh

设置环境变量

$env:VCPKG_ROOT="C:\path\to\vcpkg"
$env:PATH="$env:VCPKG_ROOT;$env:PATH"

在这里插入图片描述

从终端运行:

在这里插入图片描述

创建项目

首先,创建一个文件夹:

mkdir app

第二步,初始化这个项目的 vcpkg 配置:

cd app
vcpkg new --application

The vcpkg new command adds a vcpkg.json file and a vcpkg-configuration.json file in the project’s directory.

第三步,添加依赖包:

vcpkg add port fmt

第四步,使用 cmake: 创建 CMakePresets.json , CMakeUserPresets.json, CMakeLists.txt

这两个文件属于 CMake 的配置文件,参考:https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html

  • CMakePresets.json
{
  "version": 3,
  "configurePresets": [
    {
      "name": "vcpkg",
      "generator": "Ninja",
      "binaryDir": "${sourceDir}/build",
      "cacheVariables": {
        "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
      }
    }
  ]
}
  • CMakeUserPresets.json
{
    "version": 3,
    "configurePresets": [
        {
            "name": "default",
            "inherits": "vcpkg",
            "environment": {
                "VCPKG_ROOT": "C:\\devel\\Microsoft\\vcpkg",
                "C": "C:\\devel\\msys64\\mingw64\\bin\\gcc.exe",
                "CXX": "C:\\devel\\msys64\\mingw64\\bin\\g++.exe",
                "CMT_MINGW_PATH": "C:\\devel\\msys64\\mingw64\\bin",
                "VCPKG_TARGET_TRIPLET": "x64-mingw-static",
                "VCPKG_DEFAULT_HOST_TRIPLET": "x64-mingw-static"
            }
        }
    ]
}
  • CMakeLists.txt

注意:此处指定了 VCPKG_TARGET_TRIPLET,如果这里不声明,则会造成 build 失败,参考 LINK。

cmake_minimum_required (VERSION 3.8)
set(VCPKG_TARGET_TRIPLET x64-mingw-static)

project(HelloWorld)

find_package(fmt CONFIG REQUIRED)

add_executable(HelloWorld helloworld.cpp)

target_link_libraries(HelloWorld PRIVATE fmt::fmt)

第五步,执行构建 build

添加 helloworld.cpp 脚本

#include <fmt/core.h>

int main()
{
    fmt::print("Hello World!\n");
    return 0;
}

生成构建文件及完成构建

cmake --preset=default # 生成 build dir
cmake --build build # 进行构建

在此期间,可能会下载 PowerShell, 因为默认的 PowerShell 版本太低。

在这里插入图片描述

┌───( AdministratorAdministrator @ ZIHUATANEJO MinGw )-[ /home/Administrator/git/visualstudioexamples/vcpkg-visualstudio-quickstart ] Mon Jan 20 15:20:42  master
└─ $  cmake --preset=default
Preset CMake variables:

  CMAKE_TOOLCHAIN_FILE="C:\devel\Microsoft\vcpkg/scripts/buildsystems/vcpkg.cmake"

Preset environment variables:

  C="C:\devel\msys64\mingw64\bin\gcc.exe"
  CMT_MINGW_PATH="C:\devel\msys64\mingw64\bin"
  CXX="C:\devel\msys64\mingw64\bin\g++.exe"
  VCPKG_DEFAULT_HOST_TRIPLET="x64-mingw-static"
  VCPKG_ROOT="C:\devel\Microsoft\vcpkg"
  VCPKG_TARGET_TRIPLET="x64-mingw-static"

-- Running vcpkg install
Fetching registry information from https://github.com/microsoft/vcpkg (HEAD)...
Detecting compiler hash for triplet x64-mingw-static...
Compiler found: C:/devel/msys64/mingw64/bin/x86_64-w64-mingw32-g++.exe
The following packages will be built and installed:
    fmt:x64-mingw-static@11.0.2#1 -- C:\Users\Administrator\AppData\Local\vcpkg\registries\git-trees\07a73a7565e5de9eb42e90c16c133bdfdfebbcda
  * vcpkg-cmake:x64-mingw-static@2024-04-23 -- C:\Users\Administrator\AppData\Local\vcpkg\registries\git-trees\e74aa1e8f93278a8e71372f1fa08c3df420eb840
  * vcpkg-cmake-config:x64-mingw-static@2024-05-23 -- C:\Users\Administrator\AppData\Local\vcpkg\registries\git-trees\97a63e4bc1a17422ffe4eff71da53b4b561a7841
Additional packages (*) will be modified to complete this operation.
Restored 0 package(s) from C:\Users\Administrator\AppData\Local\vcpkg\archives in 231 us. Use --debug to see more details.
Installing 1/3 vcpkg-cmake-config:x64-mingw-static@2024-05-23...
Building vcpkg-cmake-config:x64-mingw-static@2024-05-23...
C:\devel\Microsoft\vcpkg\triplets\community\x64-mingw-static.cmake: info: loaded community triplet from here. Community triplets are not built in the curated registry and are thus less likely to succeed.
C:\Users\Administrator\AppData\Local\vcpkg\registries\git-trees\97a63e4bc1a17422ffe4eff71da53b4b561a7841: info: installing overlay port from here
-- Installing: C:/devel/Microsoft/vcpkg/packages/vcpkg-cmake-config_x64-mingw-static/share/vcpkg-cmake-config/vcpkg_cmake_config_fixup.cmake
-- Installing: C:/devel/Microsoft/vcpkg/packages/vcpkg-cmake-config_x64-mingw-static/share/vcpkg-cmake-config/vcpkg-port-config.cmake
-- Installing: C:/devel/Microsoft/vcpkg/packages/vcpkg-cmake-config_x64-mingw-static/share/vcpkg-cmake-config/copyright
-- Skipping post-build validation due to VCPKG_POLICY_EMPTY_PACKAGE
Stored binaries in 1 destinations in 32.3 ms.
Elapsed time to handle vcpkg-cmake-config:x64-mingw-static: 320 ms
vcpkg-cmake-config:x64-mingw-static package ABI: cf85dd156c7d9949e2fd4502691a332dda8c39d40ee6cb0d9f6b6f356d715d76
Installing 2/3 vcpkg-cmake:x64-mingw-static@2024-04-23...
Building vcpkg-cmake:x64-mingw-static@2024-04-23...
C:\devel\Microsoft\vcpkg\triplets\community\x64-mingw-static.cmake: info: loaded community triplet from here. Community triplets are not built in the curated registry and are thus less likely to succeed.
C:\Users\Administrator\AppData\Local\vcpkg\registries\git-trees\e74aa1e8f93278a8e71372f1fa08c3df420eb840: info: installing overlay port from here
-- Installing: C:/devel/Microsoft/vcpkg/packages/vcpkg-cmake_x64-mingw-static/share/vcpkg-cmake/vcpkg_cmake_configure.cmake
-- Installing: C:/devel/Microsoft/vcpkg/packages/vcpkg-cmake_x64-mingw-static/share/vcpkg-cmake/vcpkg_cmake_build.cmake
-- Installing: C:/devel/Microsoft/vcpkg/packages/vcpkg-cmake_x64-mingw-static/share/vcpkg-cmake/vcpkg_cmake_install.cmake
-- Installing: C:/devel/Microsoft/vcpkg/packages/vcpkg-cmake_x64-mingw-static/share/vcpkg-cmake/vcpkg-port-config.cmake
-- Installing: C:/devel/Microsoft/vcpkg/packages/vcpkg-cmake_x64-mingw-static/share/vcpkg-cmake/copyright
-- Performing post-build validation
Stored binaries in 1 destinations in 26.9 ms.
Elapsed time to handle vcpkg-cmake:x64-mingw-static: 306 ms
vcpkg-cmake:x64-mingw-static package ABI: ee9e51e86e40ce79d99794b64e319b8cde327693db66cd702094716b544af5b7
Installing 3/3 fmt:x64-mingw-static@11.0.2#1...
Building fmt:x64-mingw-static@11.0.2#1...
C:\devel\Microsoft\vcpkg\triplets\community\x64-mingw-static.cmake: info: loaded community triplet from here. Community triplets are not built in the curated registry and are thus less likely to succeed.
C:\Users\Administrator\AppData\Local\vcpkg\registries\git-trees\07a73a7565e5de9eb42e90c16c133bdfdfebbcda: info: installing overlay port from here
-- Using cached fmtlib-fmt-11.0.2.tar.gz.
-- Cleaning sources at C:/devel/Microsoft/vcpkg/buildtrees/fmt/src/11.0.2-c30c0a133f.clean. Use --editable to skip cleaning for the packages you specify.
-- Extracting source C:/devel/Microsoft/vcpkg/downloads/fmtlib-fmt-11.0.2.tar.gz
-- Applying patch fix-write-batch.patch
-- Applying patch fix-pass-utf-8-only-if-the-compiler-is-MSVC-at-build.patch
-- Using source at C:/devel/Microsoft/vcpkg/buildtrees/fmt/src/11.0.2-c30c0a133f.clean
-- Found external ninja('1.12.1').
-- Configuring x64-mingw-static
-- Building x64-mingw-static-dbg
-- Building x64-mingw-static-rel
-- Fixing pkgconfig file: C:/devel/Microsoft/vcpkg/packages/fmt_x64-mingw-static/lib/pkgconfig/fmt.pc
-- Using cached msys2-mingw-w64-x86_64-pkgconf-1~2.3.0-1-any.pkg.tar.zst.
-- Using cached msys2-msys2-runtime-3.5.4-2-x86_64.pkg.tar.zst.
-- Using msys root at C:/devel/Microsoft/vcpkg/downloads/tools/msys2/21caed2f81ec917b
-- Fixing pkgconfig file: C:/devel/Microsoft/vcpkg/packages/fmt_x64-mingw-static/debug/lib/pkgconfig/fmt.pc
-- Installing: C:/devel/Microsoft/vcpkg/packages/fmt_x64-mingw-static/share/fmt/usage
-- Installing: C:/devel/Microsoft/vcpkg/packages/fmt_x64-mingw-static/share/fmt/copyright
-- Performing post-build validation
Stored binaries in 1 destinations in 227 ms.
Elapsed time to handle fmt:x64-mingw-static: 8.3 s
fmt:x64-mingw-static package ABI: 5f12fa0d37c6557e82c8f83ff3f1763610e9ac5cd5cc43de2bb52242975582ad
Total install time: 8.9 s
The package fmt provides CMake targets:

    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt)

    # Or use the header-only version
    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt-header-only)

-- Running vcpkg install - done
-- The C compiler identification is GNU 14.2.0
-- The CXX compiler identification is GNU 14.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/devel/msys64/mingw64/bin/cc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/devel/msys64/mingw64/bin/g++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (18.2s)
-- Generating done (0.1s)
-- Build files have been written to: C:/Users/Administrator/git/visualstudioexamples/vcpkg-visualstudio-quickstart/build

在这里插入图片描述

测试可执行文件。

.\build\HelloWorld.exe

Hello World!

查询已有的包

https://vcpkg.io/en/packages?query=

快速添加依赖。

在 Visual Studio 中调试

使用 Visual Studio 打开 CMakeLists.txt 所在文件夹,会自动识别。

  • 支持自动补齐等
    在这里插入图片描述

发布依赖

自定义一个包发布到 vcpkg.

https://learn.microsoft.com/en-us/vcpkg/produce/publish-to-a-git-registry#1—create-a-vcpkg-registry-using-git

Trouble Shooting

CMake Error: CMake was unable to find a build program corresponding to “Ninja”

执行后,遇到如下错误

└─ $  cmake --preset=default
Preset CMake variables:

  CMAKE_TOOLCHAIN_FILE="C:\devel\Microsoft\vcpkg/scripts/buildsystems/vcpkg.cmake"

Preset environment variables:

  VCPKG_ROOT="C:\devel\Microsoft\vcpkg"

-- Running vcpkg install
Detecting compiler hash for triplet x64-windows...
Compiler found: C:/devel/MicrosoftVisualStudio/2022/BuildTools/VC/Tools/MSVC/14.42.34433/bin/Hostx64/x64/cl.exe
All requested packages are currently installed.
Total install time: 345 us
The package fmt provides CMake targets:

    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt)

    # Or use the header-only version
    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt-header-only)

-- Running vcpkg install - done
CMake Error: CMake was unable to find a build program corresponding to "Ninja".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!

解决方案:配置环境变量

NINJA_HOME=C:\devel\Microsoft\VisualStudio\ide2022community\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja

并且添加到 Path 中,类似如下,如果使用 Git Bash, 还需要在 .bashrc 中 export.
在这里插入图片描述

No CMAKE_CXX_COMPILER could be found

└─ $  cmake --preset=default
Preset CMake variables:

  CMAKE_TOOLCHAIN_FILE="C:\devel\Microsoft\vcpkg/scripts/buildsystems/vcpkg.cmake"

Preset environment variables:

  VCPKG_ROOT="C:\devel\Microsoft\vcpkg"

-- Running vcpkg install
Detecting compiler hash for triplet x64-windows...
Compiler found: C:/devel/MicrosoftVisualStudio/2022/BuildTools/VC/Tools/MSVC/14.42.34433/bin/Hostx64/x64/cl.exe
All requested packages are currently installed.
Total install time: 317 us
The package fmt provides CMake targets:

    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt)

    # Or use the header-only version
    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt-header-only)

-- Running vcpkg install - done
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:3 (project):
  No CMAKE_C_COMPILER could be found.

  Tell CMake where to find the compiler by setting either the environment
  variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
  the compiler, or to the compiler name if it is in the PATH.


CMake Error at CMakeLists.txt:3 (project):
  No CMAKE_CXX_COMPILER could be found.

  Tell CMake where to find the compiler by setting either the environment
  variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
  to the compiler, or to the compiler name if it is in the PATH.


-- Configuring incomplete, errors occurred!

解决方案:mingw64

使用 https://learn.microsoft.com/en-us/vcpkg/users/platforms/mingw

export VCPKG_DEFAULT_TRIPLET=x64-mingw-dynamic
export VCPKG_DEFAULT_HOST_TRIPLET=x64-mingw-dynamic

在这里插入图片描述

相关:

https://github.com/microsoft/vcpkg/issues/706
https://stackoverflow.com/questions/63031513/vcpkg-with-mingw
https://learn.microsoft.com/en-us/vcpkg/users/platforms/mingw

Links

  • https://gist.github.com/hailiang-wang/abe673e8bdb630403e11a414bc39b2a9

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《Linux服务与安全管理》| 邮件服务器安装和配置

《Linux服务与安全管理》| 邮件服务器安装和配置 目录 《Linux服务与安全管理》| 邮件服务器安装和配置 1.在Server01上安装dns、postfix、dovecot和telnet&#xff0c;并启动 2&#xff0e;在Server01上配置DNS服务器&#xff0c;设置MX资源记录 3&#xff0e;在server1上…

BGP分解实验·9——路由聚合与条件性通告(1)

路由聚合是有效控制缩减BGP路由表的方法之一&#xff0c;路由聚合的前提和IGP一样&#xff0c;需要有路由目标存在BGP表中&#xff0c;与IGP不同的是&#xff0c;BGP路由聚合可以定义按需抑制路由的能力。 实验拓扑如下所示&#xff1a; 现在开始把从R1的R5的基础配置先准备好…

Spring Boot 配置(官网文档解读)

目录 摘要 Spring Boot 配置加载顺序 配置文件加载顺序 Spring Boot 配置加载方式 Value Value 注解简单示例 ConfigurationProperties 启动 ConfigurationProperties ConfigurationProperties 验证 ConfigurationProperties 与 Value 对比 Autowired Autowired 自…

ElasticSearch JavaRestClient查询之快速入门

文章目录 查询操作流程概述构建并发起请求1. 创建请求对象2. 设置请求体3. 发送请求 查询结果的解析1. 解析结果结构2. 获取总条数3. 获取命中的数据 完整示例代码总结 查询操作流程概述 Elasticsearch 查询操作大致可以分为两个部分&#xff1a; 构建并发起请求&#xff1a;…

【C++】红黑树的应用(封装map和set)

✨ 青山一道同云雨&#xff0c;明月何曾是两乡 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;C学习 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &…

C# 给定欧氏平面中的一组线可以形成的三角形的数量

给定欧氏平面中的一组线可以形成的三角形的数量(Number of Triangles that can be formed given a set of lines in Euclidean Plane) 给定欧氏平面上的 n 条不同直线的集合 L {l 1 , l 2 , ………, l n }。第i 条直线由形式为 a i x b i y c i的方程给出。求出可以使用集合…

C++书籍 第一部分专业C++程序设计概述

1&#xff0c;必不可少的“hello world” #include<iostream>int main(int argc, char** argv) {std::cout << "hello world" << std::endl;return 0; } 这个是一个极其简单的程序&#xff0c;虽然没有多大简直&#xff0c;但是可以体现c程序格式方…

leetcode刷题记录(七十二)——146. LRU 缓存

&#xff08;一&#xff09;问题描述 146. LRU 缓存 - 力扣&#xff08;LeetCode&#xff09;146. LRU 缓存 - 请你设计并实现一个满足 LRU (最近最少使用) 缓存 [https://baike.baidu.com/item/LRU] 约束的数据结构。实现 LRUCache 类&#xff1a; * LRUCache(int capacity)…

微调时如何平衡新旧参数?

在微调预训练模型时&#xff0c;平衡新旧参数是一个重要的问题。合理地平衡新旧参数可以确保模型既保留预训练阶段学到的通用表示能力&#xff0c;又能够有效地适应特定任务。以下是一些常用的方法和技术来平衡新旧参数&#xff1a; ### 1. 学习率调整 **不同层使用不同的学习…

性能调优篇 四、JVM运行时参数

目录 一、三种JVM参数选项1、标准参数选项1&#xff09;特点2&#xff09;各种选项3&#xff09;-server 和 -client 2、-X参数选项3、-XX参数选项 二、添加JVM参数选项1、idea 如何添加jvm参数 三、常见的JVM参数选项1、打印设置的参数选项及其值2、堆、栈、方法区等内存大小设…

2024年博客之星主题创作|Android 开发:前沿技术、跨领域融合与就业技能展望

目录 引言 一、推动 Android 应用创新的核心力量 1.1 人工智能与机器学习的崛起 1.2 增强现实&#xff08;AR&#xff09;与虚拟现实&#xff08;VR&#xff09;的应用扩展 1.3 5G技术的推动 1.4 跨平台开发技术的成熟 1.4.1 React Native 1.4.2 Flutter 1.4.3 Taro …

汇编与逆向(一)-汇编工具简介

RadASM是一款著名的WIN32汇编编辑器&#xff0c;支持MASM、TASM等多种汇编编译器&#xff0c;Windows界面&#xff0c;支持语法高亮&#xff0c;自带一个资源编辑器和一个调试器。 一、汇编IDE工具&#xff1a;RadASM RadASM有内置的语言包 下载地址&#xff1a;RadASM asse…

Gin 源码概览 - 路由

本文基于gin 1.1 源码解读 https://github.com/gin-gonic/gin/archive/refs/tags/v1.1.zip 1. 注册路由 我们先来看一段gin代码&#xff0c;来看看最终得到的一颗路由树长啥样 func TestGinDocExp(t *testing.T) {engine : gin.Default()engine.GET("/api/user", f…

Linux网络序列化与反序列化

Linux网络序列化与反序列化 1. 前言 在网络通信中&#xff0c;互相通信的信息不一定都是字符串&#xff0c;往往一些结构化的信息也需要进行通信。理论上&#xff0c;只要服务器和客户端都自定义一个共同的协议&#xff0c;结构化的信息也能实现正常通信。但考虑到不同系统、…

实战经验:使用 Python 的 PyPDF 进行 PDF 操作

文章目录 1. 为什么选择 PyPDF&#xff1f;2. 安装 PyPDF3. PDF 文件的合并与拆分3.1 合并 PDF 文件3.2 拆分 PDF 文件 4. 提取 PDF 文本5. 修改 PDF 元信息6. PDF 加密与解密6.1 加密 PDF6.2 解密 PDF 7. 页面旋转与裁剪7.1 旋转页面7.2 裁剪页面 8. 实战经验总结 PDF 是一种非…

PhyCAGE:符合物理规律的图像到 3D 生成

Paper: Yan H, Zhang M, Li Y, et al. PhyCAGE: Physically Plausible Compositional 3D Asset Generation from a Single Image[J]. arXiv preprint arXiv:2411.18548, 2024. Introduction: https://wolfball.github.io/phycage/ Code: Unreleased PhyCAGE 是一种 image-to-3D…

游戏为什么失败?回顾某平庸游戏

1、上周玩了一个老鼠为主角的游戏&#xff0c;某平台喜1送的&#xff0c; 下载了很久而一直没空玩&#xff0c;大约1G&#xff0c;为了清硬盘空间而玩。 也是为了拔掉心中的一根刺&#xff0c;下载了而老是不玩总感觉不舒服。 2、老鼠造型比较写实&#xff0c;看上去就有些讨…

上位机工作感想-2024年工作总结和来年计划

随着工作年限的增增长&#xff0c;发现自己越来越不喜欢在博客里面写一些掺杂自己感想的东西了&#xff0c;或许是逐渐被工作逼得“成熟”了吧。2024年&#xff0c;学到了很多东西&#xff0c;做了很多项目&#xff0c;也帮别人解决了很多问题&#xff0c;唯独没有涨工资。来这…

Android系统开发(六):从Linux到Android:模块化开发,GKI内核的硬核科普

引言&#xff1a; 今天我们聊聊Android生态中最“硬核”的话题&#xff1a;通用内核镜像&#xff08;GKI&#xff09;与内核模块接口&#xff08;KMI&#xff09;。这是内核碎片化终结者的秘密武器&#xff0c;解决了内核和供应商模块之间无尽的兼容性问题。为什么重要&#x…

5G 核心网 相关概念快速入门

在我们开始阅读3GPP协议来学习5G核心网之前&#xff0c; 不妨来看看我之前整理的PPT&#xff0c;快速学习核心网相关概念&#xff0c; 以及5G转发面PFCP协议的相关核心知识。 涵盖了最精简的核心骨干内容&#xff0c;助你轻松上阵。 讲解目标 3GPP和相关协议 5G核心网架构模…