Windows 上编译 gRPC C++ 静态库:从依赖链到 ExternalProject 集成
简介这份资源是面向 Windows 平台 C 开发者的 gRPC 静态库合集适合需要在项目中集成高性能 RPC 通信、又不便自行编译第三方依赖的中高级开发者。包内同时提供 32 位与 64 位的 Debug、Release 四种版本覆盖常见构建配置可直接链接使用省去从源码编译 gRPC 及其依赖的繁琐过程。压缩包共 4181 个文件约 359.89MB以 2712 个 h 头文件、345 个 lib 静态库、584 个 pc 与 88 个 cmake 配置、48 个 proto 接口定义为主另含少量 dll、exe 与证书文件目录结构完整便于按模块检索与工程集成。目前已有 1051 人学习下载。对于需要快速搭建 gRPC 开发环境、研究静态链接方式或排查编译依赖问题的读者这份资源能提供开箱即用的库文件与配套头文件显著降低环境配置成本。1. 为什么 Windows 上编译 gRPC C 静态库总让人想砸键盘如果你在 Windows 上做过 gRPC C 的集成大概率经历过这样的场景CMake 配置跑了一下午依赖装了一堆最后链接阶段报出几百个LNK2001未解析的外部符号或者运行时因为 DLL 找不到直接崩溃。更让人头疼的是很多公司的交付环境要求单文件可执行、不依赖额外运行时库这时候动态库方案直接出局必须走静态库路线。gRPC C 静态库在 Windows 上的构建核心难点不在 gRPC 本身而在于它背后那一长串依赖链Protocol Buffers、Abseil、c-ares、re2、zlib、OpenSSL、upb、utf8_range。这些库在 Windows 上的编译方式、运行时库选项/MT vs /MD、字符集设置稍有偏差就会在链接期集中爆发。这篇笔记就是把这套流程从零拆开让新手能照着跑通熟手能看到参数边界和踩坑点。适合的读者需要在 Windows 平台做 C 服务端或客户端、要求静态链接、不想在目标机器上装一堆运行时的开发者。如果你只是写个 Demo 玩玩动态库方案更省事但只要涉及交付部署静态库这条路值得花时间走通。2. 先把依赖链和构建工具选型理清楚2.1 gRPC C 在 Windows 上的依赖全景gRPC 不是一个能独立编译的库它站在一堆第三方库的肩膀上。在 Windows 上用 CMake 构建时完整的依赖关系大致是这样的依赖库作用是否必须静态库构建注意点Protocol Buffers序列化与代码生成必须需要 protoc 可执行文件Abseil基础工具库字符串、时间、同步必须gRPC 1.50 强依赖c-ares异步 DNS 解析必须需关闭共享库选项re2正则表达式引擎必须需 C17 支持zlib压缩必须静态编译需定义 ZLIB_WINAPIOpenSSLTLS/SSL 加密必须Windows 上编译最费时upbprotobuf 的 C 运行时必须随 protobuf 一起构建utf8_rangeUTF-8 校验必须随 protobuf 一起构建这些库的版本必须和 gRPC 版本匹配。gRPC 每个 release 都会在third_party目录下锁定对应依赖的 commit。如果你手动去下最新版的 protobuf 配老版 gRPC大概率编译不过。常见做法是用 gRPC 官方仓库的 submodule 机制拉取依赖这样版本天然对齐。但 submodule 在国内网络环境下拉取体验不稳定所以很多人会选择手动下载各依赖的指定版本。手动管理时一定要对照 gRPC 源码根目录下third_party/*/里的版本说明文件别凭感觉选版本。2.2 构建工具链CMake Ninja 还是 Visual Studio 生成器Windows 上构建 gRPC 静态库工具链选择直接影响你的调试效率。方案一CMake Visual Studio 生成器MSBuild这是最传统的方式生成.sln文件后用 MSBuild 编译。优点是和 Visual Studio IDE 集成好调试方便缺点是编译速度慢尤其是 OpenSSL 和 gRPC 本身全量编译动辄四十分钟起步。方案二CMake Ninja MSVCNinja 的并行编译效率明显高于 MSBuild同样的机器配置下能省三分之一左右的时间。缺点是需要单独装 Ninja且调试时不如 IDE 直观。我一般会先用 Ninja 跑通编译确认没问题后再用 VS 生成器出一份工程用于日常开发。方案三vcpkg 一键安装vcpkg 确实能简化依赖管理vcpkg install grpc:x64-windows-static一条命令搞定。但它的坑在于默认 triplet 的运行时库选项可能和你的主工程不一致导致链接期出现RuntimeLibrary不匹配的错误。而且 vcpkg 编译的 gRPC 版本更新滞后遇到需要特定版本的情况就抓瞎了。我的建议是第一次搭建环境用 vcpkg 快速验证可行性正式项目用手动 CMake 构建这样每个参数都可控。2.3 运行时库选项/MT 和 /MD 的生死抉择这是 Windows 静态库构建里最容易翻车的地方。MSVC 的运行时库有两个维度/MT静态链接 CRT生成的 exe 不依赖vcruntime140.dll/MD动态链接 CRTexe 需要目标机器有对应运行时如果你要的是“单文件绿色版”那所有库包括 gRPC 本身都必须用/MT编译。但问题在于gRPC 的 CMake 默认走/MD你需要显式设置CMAKE_MSVC_RUNTIME_LIBRARY变量。# 在 CMakeLists.txt 或命令行中强制静态 CRT set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded$$CONFIG:Debug:Debug)这行 CMake 代码的作用是Release 配置用MultiThreaded即/MTDebug 配置用MultiThreadedDebug即/MTd。生成器表达式$$CONFIG:Debug:Debug会在 Debug 模式下追加Debug后缀。参数说明CMAKE_MSVC_RUNTIME_LIBRARY是 CMake 3.15 引入的变量低于这个版本只能用老式的CMAKE_CXX_FLAGS_DEBUG手动拼/MTd。如果你用的 CMake 版本较老升级到 3.20 以上会省很多事。注意一旦主工程用了/MT所有依赖库也必须用/MT否则链接期会报LNK2038检测到RuntimeLibrary不匹配。这个错误不会在编译期出现只在链接期爆发排查起来很费时间。3. 从零编译 gRPC 静态库的完整操作流程3.1 环境准备与源码获取先确认工具链版本。我用的组合是Visual Studio 2022MSVC 19.3x、CMake 3.24、Ninja 1.11、Git 2.40。低于这些版本可能遇到 CMake 脚本语法不兼容的问题。源码获取有两种方式。第一种是克隆 gRPC 主仓库并递归拉取 submodulegit clone --recurse-submodules -b v1.62.0 https://github.com/grpc/grpc.git cd grpc git submodule update --init --recursive这里-b v1.62.0指定了 gRPC 版本--recurse-submodules会同时拉取 third_party 下的所有依赖。如果网络中断导致 submodule 拉取失败进入third_party目录逐个git submodule update --init即可。第二种方式是手动下载各依赖的源码包按 gRPC 的third_party目录结构摆放。这种方式适合网络受限的场景但需要自己核对版本对应关系容易出错。3.2 CMake 配置命令与关键参数源码就绪后进入 gRPC 根目录创建构建目录并执行 CMake 配置。以下是我在 Release 静态库场景下用的命令mkdir build_static cd build_static cmake -G Ninja ^ -DCMAKE_BUILD_TYPERelease ^ -DCMAKE_INSTALL_PREFIXD:/libs/grpc-static ^ -DCMAKE_MSVC_RUNTIME_LIBRARYMultiThreaded ^ -DgRPC_BUILD_TESTSOFF ^ -DgRPC_BUILD_CSHARP_EXTOFF ^ -DgRPC_BUILD_GRPC_CSHARP_PLUGINOFF ^ -DgRPC_BUILD_GRPC_NODE_PLUGINOFF ^ -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGINOFF ^ -DgRPC_BUILD_GRPC_PHP_PLUGINOFF ^ -DgRPC_BUILD_GRPC_PYTHON_PLUGINOFF ^ -DgRPC_BUILD_GRPC_RUBY_PLUGINOFF ^ -DgRPC_SSL_PROVIDERpackage ^ -DOPENSSL_ROOT_DIRD:/libs/openssl-static ^ -DABSL_PROPAGATE_CXX_STDON ^ -DCMAKE_CXX_STANDARD17 ^ ..逐条说明关键参数-DCMAKE_MSVC_RUNTIME_LIBRARYMultiThreaded强制所有目标用/MT这是静态库方案的核心开关。-DgRPC_BUILD_TESTSOFF关掉测试代码能省大量编译时间。gRPC 的测试用例非常多全编会多花二十分钟以上。-DgRPC_BUILD_GRPC_*_PLUGINOFF关掉各种语言插件的构建。如果你只用 C这些插件完全不需要关掉能减少编译目标数量。-DgRPC_SSL_PROVIDERpackage表示 OpenSSL 用外部已编译好的包而不是从源码构建。这要求你提前编译好 OpenSSL 静态库并设置OPENSSL_ROOT_DIR。如果你不想单独编 OpenSSL可以改成-DgRPC_SSL_PROVIDERmodule让 gRPC 自己编但耗时更长。-DABSL_PROPAGATE_CXX_STDON确保 Abseil 继承主工程的 C 标准设置避免 Abseil 用 C14 而 gRPC 用 C17 导致 ABI 不一致。-DCMAKE_CXX_STANDARD17指定 C17。gRPC 1.60 以后要求至少 C17低于这个标准会编译失败。3.3 编译与安装Ninja 并行构建实操配置成功后执行编译cmake --build . --config Release -j 8-j 8表示并行 8 个任务具体数字根据 CPU 核心数调整。一般设为核心数的 1.5 倍左右比较合适太多会因内存不足导致编译进程被系统杀掉。编译完成后安装到指定目录cmake --install . --config Release安装目录下会生成include、lib、bin三个子目录。lib里是.lib静态库文件bin里是protoc.exe和grpc_cpp_plugin.exe等工具。注意grpc_cpp_plugin.exe是生成 gRPC 服务代码的插件必须和protoc.exe配合使用。安装后确认这两个文件都在bin目录下后续生成代码时要用到。3.4 验证静态库是否可用写一个最小 Echo 服务编译完不验证等于没编。写一个最小的 proto 文件和服务端代码来确认整条链路通畅。先定义 proto// echo.proto syntax proto3; package echo; service EchoService { rpc Echo (EchoRequest) returns (EchoReply); } message EchoRequest { string message 1; } message EchoReply { string message 1; }用 protoc 生成 C 代码protoc -I . ^ --cpp_out. ^ --grpc_out. ^ --pluginprotoc-gen-grpcD:/libs/grpc-static/bin/grpc_cpp_plugin.exe ^ echo.proto--cpp_out生成消息类的序列化代码--grpc_out生成服务桩代码--plugin指定 gRPC 插件路径。执行后会得到echo.pb.cc、echo.pb.h、echo.grpc.pb.cc、echo.grpc.pb.h四个文件。然后写服务端// server.cpp #include grpcpp/grpcpp.h #include echo.grpc.pb.h class EchoServiceImpl final : public echo::EchoService::Service { grpc::Status Echo(grpc::ServerContext* context, const echo::EchoRequest* request, echo::EchoReply* reply) override { reply-set_message(echo: request-message()); return grpc::Status::OK; } }; int main() { std::string address(0.0.0.0:50051); EchoServiceImpl service; grpc::ServerBuilder builder; builder.AddListeningPort(address, grpc::InsecureServerCredentials()); builder.RegisterService(service); std::unique_ptrgrpc::Server server(builder.BuildAndStart()); if (!server) { return 1; } server-Wait(); return 0; }对应的 CMakeLists.txtcmake_minimum_required(VERSION 3.20) project(echo_server CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded) find_package(gRPC CONFIG REQUIRED) find_package(Protobuf CONFIG REQUIRED) add_executable(echo_server server.cpp echo.pb.cc echo.grpc.pb.cc) target_link_libraries(echo_server PRIVATE gRPC::grpc gRPC::grpc_reflection protobuf::libprotobuf )find_package(gRPC CONFIG REQUIRED)依赖安装目录下的gRPCConfig.cmake这个文件在cmake --install时自动生成。gRPC::grpc是 gRPC 的 C 静态库目标gRPC::grpc_reflection是反射服务库调试时有用。编译这个服务端如果链接通过且运行后能正常监听端口说明静态库构建成功。4. 避坑指南静态库构建中最容易翻车的五个点4.1 LNK2038 RuntimeLibrary 不匹配现象链接时大量报错LNK2038: 检测到RuntimeLibrary的不匹配项: 值MT_StaticRelease不匹配值MD_DynamicRelease。原因主工程用/MT但某个依赖库是用/MD编的。常见于 OpenSSL 或 zlib 是之前用默认选项编好的。解决重新编译所有依赖库统一加-DCMAKE_MSVC_RUNTIME_LIBRARYMultiThreaded。如果依赖库不支持 CMake需要在 Makefile 或项目属性里手动把运行时库改成/MT。检查方法是打开 VS 的“库管理器”查看.lib文件的编译选项或者用dumpbin /directives xxx.lib搜索RuntimeLibrary相关条目。4.2 链接期报大量未解析符号 LNK2001现象编译通过链接时报几百个LNK2001符号名涉及absl::、grpc::、google::protobuf::等命名空间。原因链接顺序不对或者缺少某个依赖库。Windows 链接器对静态库的链接顺序敏感被依赖的库要放在依赖它的库后面。解决在 CMake 里用target_link_libraries时把 gRPC 放在 protobuf 前面Abseil 放在 gRPC 前面。如果还是报错用dumpbin /symbols找到缺失符号所在的库手动补到链接列表里。另一个常见原因是grpc_reflection没链接反射相关的符号会缺失。4.3 protoc 生成代码时插件找不到现象执行protoc --grpc_out时报错--grpc_out: protoc-gen-grpc: 系统找不到指定的文件。原因grpc_cpp_plugin.exe不在 PATH 里或者--plugin参数路径写错了。解决用绝对路径指定插件位置如--pluginprotoc-gen-grpcD:/libs/grpc-static/bin/grpc_cpp_plugin.exe。注意 Windows 下路径分隔符用/或\\不要用单个\否则会被当成转义字符。4.4 编译 OpenSSL 时 NASM 缺失现象编译 OpenSSL 静态库时配置阶段报错nasm not found。原因OpenSSL 的 x86_64 汇编优化需要 NASM 汇编器Windows 上默认没有。解决下载 NASM 并加入 PATH。如果不想装 NASM可以在 OpenSSL 配置时加no-asm参数跳过汇编优化但性能会有所下降。命令是perl Configure VC-WIN64A no-asm --prefixD:/libs/openssl-static。4.5 Debug 和 Release 混用导致运行崩溃现象Debug 模式下编译通过运行时报堆损坏或断言失败。原因部分库是 Release 版部分库是 Debug 版。Debug 版的 CRT 和 Release 版的内存布局不同混用会导致堆操作崩溃。解决Debug 和 Release 的库分开编译、分目录存放。CMake 配置时用CMAKE_BUILD_TYPE区分安装目录也分开比如grpc-static-debug和grpc-static-release。在工程里通过find_package的PATHS参数指向对应目录。5. 进阶技巧用 ExternalProject 把 gRPC 静态库集成进主工程手动编译 gRPC 静态库虽然可控但每次换机器或升级版本都要重来一遍维护成本不低。更优雅的做法是用 CMake 的ExternalProject_Add把 gRPC 的构建过程集成到主工程里实现“配置即编译”。5.1 ExternalProject 集成 gRPC 的核心写法include(ExternalProject) set(GRPC_VERSION v1.62.0) set(GRPC_PREFIX ${CMAKE_BINARY_DIR}/grpc-install) set(GRPC_SOURCE ${CMAKE_BINARY_DIR}/grpc-src) ExternalProject_Add(grpc_static GIT_REPOSITORY https://github.com/grpc/grpc.git GIT_TAG ${GRPC_VERSION} GIT_SUBMODULES_RECURSE TRUE SOURCE_DIR ${GRPC_SOURCE} CMAKE_ARGS -G ${CMAKE_GENERATOR} -DCMAKE_BUILD_TYPERelease -DCMAKE_INSTALL_PREFIX${GRPC_PREFIX} -DCMAKE_MSVC_RUNTIME_LIBRARYMultiThreaded -DgRPC_BUILD_TESTSOFF -DgRPC_BUILD_GRPC_CSHARP_PLUGINOFF -DgRPC_BUILD_GRPC_NODE_PLUGINOFF -DgRPC_BUILD_GRPC_PHP_PLUGINOFF -DgRPC_BUILD_GRPC_PYTHON_PLUGINOFF -DgRPC_BUILD_GRPC_RUBY_PLUGINOFF -DgRPC_SSL_PROVIDERmodule -DCMAKE_CXX_STANDARD17 BUILD_BYPRODUCTS ${GRPC_PREFIX}/lib/grpc*.lib ${GRPC_PREFIX}/bin/protoc.exe ${GRPC_PREFIX}/bin/grpc_cpp_plugin.exe INSTALL_DIR ${GRPC_PREFIX} )GIT_SUBMODULES_RECURSE TRUE确保拉取所有子模块。BUILD_BYPRODUCTS告诉 CMake 这个外部项目会产出哪些文件避免增量构建时误判。INSTALL_DIR指定安装前缀。5.2 在主工程中引用 ExternalProject 产物ExternalProject 的产物不能直接用find_package找到需要手动创建 imported targetExternalProject_Get_Property(grpc_static INSTALL_DIR) set(GRPC_INSTALL_DIR ${INSTALL_DIR}) add_library(grpc STATIC IMPORTED) set_target_properties(grpc PROPERTIES IMPORTED_LOCATION ${GRPC_INSTALL_DIR}/lib/grpc.lib INTERFACE_INCLUDE_DIRECTORIES ${GRPC_INSTALL_DIR}/include ) add_dependencies(grpc grpc_static)这段代码创建了一个名为grpc的 imported target指向 ExternalProject 编译出的静态库文件。add_dependencies确保主工程编译前先完成 gRPC 的构建。5.3 版本升级与增量构建的注意事项用 ExternalProject 集成后升级 gRPC 版本只需要改GIT_TAG。但要注意改了 tag 之后CMake 不会自动重新拉取源码需要手动删除${GRPC_SOURCE}目录再重新配置。或者用ExternalProject_Add_Step加一个自定义步骤来检测版本变化。另一个坑是增量构建。ExternalProject 默认在源码目录里做增量编译如果中途改了 CMake 参数旧的构建缓存可能导致配置不生效。稳妥的做法是每次改参数后清空${GRPC_SOURCE}/build目录。提示如果团队里多人协作建议把编译好的 gRPC 静态库打包成压缩包放到内部文件服务器新成员直接下载解压省去每人编译一小时的等待。ExternalProject 方案更适合 CI 环境或需要频繁切换版本的场景。我自己在这个环节踩过最深的坑是ExternalProject 的CMAKE_ARGS里传了-DCMAKE_MSVC_RUNTIME_LIBRARYMultiThreaded但主工程忘了设同样的选项结果链接期报了一屏LNK2038。后来养成的习惯是把运行时库选项写进一个公共的toolchain.cmake文件主工程和 ExternalProject 都include这个文件从根上杜绝不一致。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

从零手搓TopDownShooter:游戏循环与对象池实战

从零手搓TopDownShooter:游戏循环与对象池实战

简介:这是一份面向C游戏开发初学者与2D射击游戏爱好者的完整源码工程,实现了一个带视野遮挡效果的自上而下射击玩法。项目基于SFML与Box2D构建,涵盖光照、阴影、小地图、碰撞检测、子弹管理、地图生成等核心模块,适合用来学习游戏…

2026/10/12 5:46:23 阅读更多 →
小米手机传文件到电脑的四种高效方案与选型指南

小米手机传文件到电脑的四种高效方案与选型指南

你有没有过这种经历:手机里躺着一份刚收到的文件,电脑就在旁边,但你在心里把能用的传输方式翻了个遍,愣是找不到一条顺手的路?这种事我过去经常碰到,尤其手上这台主力机恰好是小米手机的时候。后来我把常用…

2026/10/12 5:45:23 阅读更多 →
Codex重连卡顿根源:一行配置修复协议协同失配

Codex重连卡顿根源:一行配置修复协议协同失配

1. 项目概述:这不是网络故障,是连接策略失配“Codex 重连卡半天,一行配置搞定”——看到这个标题,我第一反应不是去查日志,而是先翻出自己去年在某跨平台开发项目里踩过的坑。当时团队用 Codex 做代码补全服务集成&…

2026/10/12 5:45:22 阅读更多 →

最新新闻

老毛桃UEFI启动盘v7.0:稳过Secure Boot,原生支持NVMe与Win11架构识别

老毛桃UEFI启动盘v7.0:稳过Secure Boot,原生支持NVMe与Win11架构识别

简介:老毛桃U盘启动盘制作工具(UEFI版 装机版)v7.0是一款面向电脑初学者与系统维护人员的轻量级系统辅助工具,专为快速制作兼容UEFI与传统BIOS的U盘启动盘、安装原版Windows系统及执行PE环境下的故障排查而设计。资源包共2个文件&…

2026/10/12 7:07:08 阅读更多 →
Windows内核驱动开发:WDK与VC++编程实战指南

Windows内核驱动开发:WDK与VC++编程实战指南

简介:本资源是一套面向Windows驱动开发初学者与进阶工程师的VC底层驱动源码集合,聚焦内核模式编程实践,帮助开发者掌握设备驱动框架搭建、IRP处理、设备对象注册、中断服务例程及WDF模型等核心能力。压缩包共657个文件,涵盖304个头…

2026/10/12 7:07:08 阅读更多 →
C++继承深度解析:从is-a关系到多态与封装的最佳实践

C++继承深度解析:从is-a关系到多态与封装的最佳实践

我经常被问到一个问题:C学了类之后,继承到底什么时候该用?很多人把继承简单理解成“子类复用父类代码”,结果遇上多层继承就头疼。其实继承在C里不只是代码复用,它是类型系统的一部分,负责表达类型之间的“…

2026/10/12 7:07:08 阅读更多 →
VSCode+OpenRouter接入Claude模型:账号受限后恢复AI编程工作流

VSCode+OpenRouter接入Claude模型:账号受限后恢复AI编程工作流

解决Claude账号不可用的尴尬处境:用VSCode OpenRouter把模型接回编辑器1. 账号不可用之后,怎么继续用上Claude模型能力?1.1 突发情况:账号受限后的开发断档作为一个长期依赖AI辅助写代码的人,我最怕的其实不是模型回答…

2026/10/12 7:07:07 阅读更多 →
基于Java的Web漏洞扫描系统设计:从爬虫、SQL注入检测到并发控制

基于Java的Web漏洞扫描系统设计:从爬虫、SQL注入检测到并发控制

简介:面向网络安全学习者与Java开发人员的Web漏洞扫描系统设计资源,聚焦扫描引擎的整体实现,帮助理解构建思路、漏洞规则组织以及如何与Nmap脚本体系联动。压缩包内共927个文件,整体大小约33.07MB,以604个NSE脚本和146…

2026/10/12 7:07:07 阅读更多 →
基于JavaEE的网上书店项目实战:从环境配置到核心代码解析

基于JavaEE的网上书店项目实战:从环境配置到核心代码解析

简介:一份基于JavaEE的网上书店项目,包含完整源代码与SQL初始化脚本,适合作为课程设计或毕业设计,覆盖用户注册登录、图书检索、购物车结算、订单管理、后台维护、销售统计等完整业务流程。压缩包为ZIP格式,共88个文件…

2026/10/12 7:06:07 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →