VS2010 下 libcurl 可编译工程:编译配置、调用与避坑指南
简介这份资源面向需要在 Visual Studio 2010 环境下集成网络传输能力的 C/C 开发者提供了一套可直接编译通过的 libcurl 库文件并兼容 VS2008重点解决了 release 模式下常见的外部链接错误问题省去自行配置编译环境的繁琐过程。压缩包共 13 个文件以 10 个 h 头文件、2 个 lib 库文件和 1 个 txt 说明文档为主头文件覆盖 curl.h、easy.h、multi.h、curlbuild.h 等核心接口声明lib 文件区分 Debug 与 Release 两种配置整体约 287KB体积轻便。说明文档中附带了编译与链接的注意事项可帮助读者理解预处理器定义、包含目录、库目录及链接器输入项的配置要点。目前已有 281 人学习下载适合希望快速在旧版 VS 工具链中接入 HTTP、FTP 等协议传输功能的中初级开发者参考使用。1. libcurl 在 VS2010 下可编译一个被低估的老项目维护刚需如果你手上还有 VS2010 维护的工控上位机、医疗设备客户端或者某类只跑在 XP/Win7 上的老工具那你大概率遇到过这个场景需要发 HTTP 请求、上传文件、对接一个还在用 HTTP 的旧接口但项目里没有现成的网络库引入新版本 libcurl 又因为编译器版本对不上直接编译失败。libcurl VS2010 可编译这个资源解决的就是这件事——它提供了一份能在 Visual Studio 2010 环境下直接编译通过的 libcurl 源码工程不需要你升级 IDE也不需要去啃 CMake 生成的那一堆平台适配问题。这份资源适合三类人一是维护遗留 C/C 项目的工程师二是需要在 VS2010 里做 HTTP 客户端但不想引入额外依赖的开发者三是教学或实验环境被锁定在 VS2010 的场景。它不追求最新版本特性核心价值是「能编过、能跑通、能静态链接进现有工程」。下面从工程结构、编译配置、调用方式到踩坑排查按实际动手顺序拆一遍。2. 工程结构与编译配置把 libcurl 塞进 VS2010 的正确姿势2.1 先看清目录里有什么别急着点编译拿到这份可编译资源后第一件事不是打开 sln 就按 F7。先花两分钟确认目录结构能省掉后面半小时的报错排查。典型的 libcurl VS2010 可编译包目录大致是这样组织的目录/文件作用是否需要改动include/curl/对外头文件curl.h、easy.h 等不改直接引用lib/libcurl 静态库工程源码按需裁剪功能src/curl 命令行工具工程可不用libcurl.slnVS2010 解决方案入口检查平台工具集curl_config.h编译期功能开关重点检查项这里最容易翻车的是curl_config.h。libcurl 在 Linux 下靠 configure 脚本自动生成这个文件Windows 下必须手工维护。资源里如果已经带了一份适配 VS2010 的配置你要确认里面HAVE_*系列宏和你的实际需求是否匹配。比如你只需要 HTTP那CURL_DISABLE_FTP、CURL_DISABLE_LDAP这些开关就该打开能显著减少编译单元和最终库体积。常见做法是先原样编译一次确认能过再根据自己需要的协议去裁剪。不要一上来就关一堆宏否则某个依赖链断了报错信息会把你带到完全无关的方向。2.2 解决方案配置Debug/Release 与运行库的对应关系打开 sln 后先看配置管理器里的平台和运行库设置。VS2010 默认新建工程用的是/MDdDebug 多线程 DLL 运行库但很多老项目为了部署方便用的是/MTd静态运行库。这两者混用会直接导致链接期报LNK2005重复定义或LNK4098冲突。我一般会这样做先确认主工程的运行库设置然后让 libcurl 工程跟它保持一致。具体路径是右键 libcurl 工程 → 属性 → C/C → 代码生成 → 运行库。Debug 配/MTdRelease 配/MT四个配置Debug/Release × Win32/x64都要检查别只改当前选中的那个。# 如果你习惯用命令行编译可以用 msbuild 指定配置 msbuild libcurl.sln /p:ConfigurationRelease /p:PlatformWin32 /p:PlatformToolsetv100上面这条命令里PlatformToolsetv100就是 VS2010 对应的工具集版本。如果你在更高版本 VS 里打开这个工程工具集可能被自动升级反而编不过。所以要么坚持用 VS2010 打开要么在项目属性里手动把平台工具集锁回 v100。还有一个细节libcurl 的预处理器定义里通常有CURL_STATICLIB。如果你编的是静态库这个宏必须存在否则调用方链接时会去找__imp__curl_easy_init这类动态符号报一堆无法解析的外部符号。这个坑我在第一次集成时踩过查了半天才发现是宏没定义。2.3 裁剪功能关掉不需要的协议减少依赖libcurl 默认支持一大堆协议但在 VS2010 环境下有些协议依赖外部库比如 LDAP 需要 Windows SDK 里的 wldap32.libSSH 需要 libssh2。如果你不需要这些最省事的做法是在curl_config.h里把它们关掉。/* curl_config.h 中常见的裁剪开关 */ #define CURL_DISABLE_FTP 1 /* 不需要 FTP关掉 */ #define CURL_DISABLE_LDAP 1 /* 关掉 LDAP省去 wldap32 依赖 */ #define CURL_DISABLE_TELNET 1 /* 关掉 Telnet */ #define CURL_DISABLE_DICT 1 /* 关掉字典协议 */ #define CURL_DISABLE_FILE 1 /* 关掉 file:// 协议 */ #define CURL_DISABLE_TFTP 1 /* 关掉 TFTP */每关掉一个协议对应的源文件就不会被编译链接时也不会去找相关系统库。但要注意CURL_DISABLE_HTTP千万别关关了就没意义了。另外CURL_DISABLE_PROXY这个宏要谨慎如果你的程序需要走代理访问内网接口关了之后CURLOPT_PROXY就失效了。裁剪完之后重新编译观察输出窗口的编译单元数量变化。如果从一百多个变成几十个说明裁剪生效了。这时候再检查链接器输入里是否还有多余的.lib依赖比如ws2_32.lib是必须的wldap32.lib在关了 LDAP 之后就可以去掉。3. 在 VS2010 工程里调用 libcurl从初始化到收包的完整链路3.1 最小可用示例一个 HTTP GET 请求的完整代码编译出 libcurl 静态库之后下一步是在你自己的 VS2010 工程里调用它。先配置好头文件路径和库路径项目属性 → C/C → 常规 → 附加包含目录加上include目录链接器 → 常规 → 附加库目录加上lib输出目录链接器 → 输入 → 附加依赖项加上libcurl.lib和ws2_32.lib。然后写一个最小的 GET 请求来验证链路是否通#include stdio.h #include curl/curl.h /* 回调函数把收到的数据写到缓冲区或直接打印 */ static size_t write_callback(void *ptr, size_t size, size_t nmemb, void *userdata) { size_t total size * nmemb; fwrite(ptr, 1, total, stdout); /* 简单起见直接输出到控制台 */ return total; } int main(void) { CURL *curl; CURLcode res; curl_global_init(CURL_GLOBAL_DEFAULT); /* 全局初始化整个进程调一次 */ curl curl_easy_init(); /* 创建 easy 句柄 */ if (curl) { curl_easy_setopt(curl, CURLOPT_URL, http://httpbin.org/get); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10L); /* 超时 10 秒 */ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); /* 跟随重定向 */ res curl_easy_perform(curl); /* 执行请求 */ if (res ! CURLE_OK) { fprintf(stderr, curl_easy_perform failed: %s\n, curl_easy_strerror(res)); } curl_easy_cleanup(curl); /* 释放句柄 */ } curl_global_cleanup(); /* 全局清理 */ return 0; }这段代码的逻辑很直白curl_global_init做全局初始化curl_easy_init拿句柄curl_easy_setopt设参数curl_easy_perform发请求最后清理。关键参数说明一下CURLOPT_TIMEOUT设的是整个请求的总超时单位秒CURLOPT_FOLLOWLOCATION设为 1 表示遇到 301/302 自动跳转CURLOPT_WRITEFUNCTION指定数据到达时的回调不设的话默认输出到 stdout。如果你在 VS2010 里编译这段代码报无法解析的外部符号 __imp__curl_easy_init说明链接的是动态库导入库而不是静态库检查CURL_STATICLIB宏是否在调用方工程里也定义了。这个宏要在调用方和 libcurl 工程里同时存在缺一不可。3.2 POST 上传与超时重试参数怎么设才不翻车GET 跑通之后实际项目里更常见的是 POST 上传 JSON 或表单。这里有两个参数最容易设错CURLOPT_POSTFIELDS和CURLOPT_POSTFIELDSIZE。前者是数据指针后者是数据长度。如果你只设了指针没设长度libcurl 会用strlen去算遇到二进制数据里含\0就会截断。const char *json_body {\device_id\:\A001\,\status\:1}; struct curl_slist *headers NULL; headers curl_slist_append(headers, Content-Type: application/json); curl_easy_setopt(curl, CURLOPT_URL, http://api.example.com/report); curl_easy_setopt(curl, CURLOPT_POST, 1L); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_body); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(json_body)); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 5L); /* 连接超时 5 秒 */ curl_easy_setopt(curl, CURLOPT_TIMEOUT, 30L); /* 总超时 30 秒 */ res curl_easy_perform(curl); curl_slist_free_all(headers); /* 释放 header 链表别忘了 */CURLOPT_CONNECTTIMEOUT和CURLOPT_TIMEOUT的区别值得说清楚前者只管 TCP 连接建立阶段后者管从连接到收完数据的全过程。在弱网环境下连接超时可以设短一点5 秒总超时根据数据量设长一点30 秒。如果只设总超时连接阶段卡住也会一直等用户体验很差。重试逻辑我一般不在 libcurl 层面做而是在外层包一个循环根据res的返回值判断是否重试。CURLE_OPERATION_TIMEDOUT、CURLE_COULDNT_CONNECT这类错误可以重试CURLE_URL_MALFORMAT这种参数错误重试也没用。重试次数建议不超过 3 次每次间隔递增避免把服务端打挂。3.3 多线程场景curl_global_init 的调用时机VS2010 时代的项目很多还是多线程模型如果你的程序里多个线程都要发 HTTP 请求curl_global_init必须在创建任何线程之前调用而且整个进程只调一次。我见过有人在每个线程里都调一次curl_global_init在 Debug 下没出问题Release 下偶发崩溃查了两天才定位到。正确的做法是在main或WinMain开头调一次curl_global_init(CURL_GLOBAL_DEFAULT)然后每个线程各自curl_easy_init拿自己的句柄。easy 句柄不要跨线程共享一个句柄同时只能被一个线程使用。如果确实需要共享用curl_easy_duphandle复制一份或者改用 multi 接口。另外CURL_GLOBAL_DEFAULT在 Windows 下会自动初始化 Winsock所以你的程序里不需要再单独调WSAStartup。但如果你在curl_global_init之前就调了WSAStartup也不冲突libcurl 会检测到已经初始化过。这个细节在文档里写得比较隐晦实际用的时候知道就行。4. 避坑与排查VS2010 编译 libcurl 最常见的五类问题4.1 现象编译报error C2065: socklen_t : undeclared identifier原因socklen_t是 POSIX 类型Windows 的 winsock2.h 里没有定义。libcurl 在跨平台适配时通常会用curl_socklen_t做一层包装但如果curl_config.h里相关宏没配对就会直接暴露出来。解决在curl_config.h里确认#define curl_socklen_t int这一行存在。如果没有手动加上。或者在项目预处理器定义里加-Dcurl_socklen_tint。这个坑在 VS2010 下尤其常见因为 VS2010 的 Windows SDK 版本对 POSIX 兼容类型的支持不如后续版本完整。4.2 现象链接报LNK2019: 无法解析的外部符号 __imp__recv16原因链接器找不到 Winsock 的导入库。libcurl 内部调用了recv、send、socket等函数这些在ws2_32.lib里。解决在调用方工程的链接器 → 输入 → 附加依赖项里加上ws2_32.lib。注意顺序ws2_32.lib要放在libcurl.lib后面因为链接器是从后往前解析依赖的。如果还是报错检查是否在代码里包含了winsock2.h之前先包含了windows.h这会导致 winsock1 和 winsock2 冲突。解决办法是定义WIN32_LEAN_AND_MEAN宏或者在包含windows.h之前先包含winsock2.h。4.3 现象Debug 下正常Release 下请求返回CURLE_SSL_CACERT原因Release 配置下优化开启某些条件编译分支走了不同路径。更常见的原因是 Debug 和 Release 用的curl_config.h不是同一份或者 Release 下没有正确设置 CA 证书路径。解决如果你用的是 HTTPS需要设置CURLOPT_CAINFO指向 cacert.pem 的路径。在 Windows 下也可以设CURLOPT_SSL_VERIFYPEER为 0 来跳过验证但生产环境不建议这么做。先确认 Debug 和 Release 的预处理器定义是否一致特别是CURL_STATICLIB和CURL_DISABLE_*系列宏。我一般会在两个配置下分别输出curl_version()的结果做对比看特性列表是否一致。4.4 现象程序退出时崩溃在curl_global_cleanup原因curl_global_cleanup调用时还有 easy 句柄没释放或者调用顺序反了——先 cleanup 再 cleanup 句柄。解决确保每个curl_easy_init都有对应的curl_easy_cleanup且所有 easy 句柄释放完之后再调curl_global_cleanup。在多线程场景下要等所有线程都退出后再做全局清理。如果程序是 DLL 形式被加载curl_global_init放在DllMain的DLL_PROCESS_ATTACH里curl_global_cleanup放在DLL_PROCESS_DETACH里但要注意DllMain里不能做耗时操作curl_global_init本身很快一般没问题。4.5 现象请求发出去了但服务端收不到或者收到乱码原因CURLOPT_POSTFIELDSIZE没设对或者 Content-Type 和实际数据格式不匹配。还有一种情况是数据里含中文源文件编码和传输编码不一致。解决先确认CURLOPT_POSTFIELDSIZE设的是字节数而不是字符数。如果数据里有中文VS2010 默认源文件编码可能是 GBK而服务端期望 UTF-8需要在发送前做编码转换。我一般会在发送前把 JSON 打印出来确认内容再用curl_easy_getinfo拿CURLINFO_SIZE_UPLOAD看实际发了多少字节和预期对比。如果字节数对不上基本就是长度参数设错了。5. 进阶技巧用 curl_multi 接口做并发请求与超时控制单线程 easy 接口一次只能发一个请求如果你需要同时拉取多个接口的数据用 multi 接口比开多个线程更轻量。multi 接口的核心思路是把多个 easy 句柄加到一个 multi 句柄里然后在一个循环里用curl_multi_perform驱动配合select或curl_multi_wait做事件等待。CURLM *multi curl_multi_init(); CURL *handles[3]; int still_running 0; for (int i 0; i 3; i) { handles[i] curl_easy_init(); curl_easy_setopt(handles[i], CURLOPT_URL, urls[i]); curl_easy_setopt(handles[i], CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(handles[i], CURLOPT_TIMEOUT, 15L); curl_multi_add_handle(multi, handles[i]); } curl_multi_perform(multi, still_running); while (still_running) { int numfds 0; curl_multi_wait(multi, NULL, 0, 1000, numfds); /* 最多等 1 秒 */ curl_multi_perform(multi, still_running); } /* 收尾移除并释放每个 easy 句柄 */ for (int i 0; i 3; i) { curl_multi_remove_handle(multi, handles[i]); curl_easy_cleanup(handles[i]); } curl_multi_cleanup(multi);这段代码里curl_multi_wait的第四个参数是超时毫秒数设 1000 表示最多等 1 秒就返回避免死等。still_running是输出参数表示还有几个请求没完成。循环里先 wait 再 perform 的顺序不能反否则会空转占 CPU。用 multi 接口时要注意每个 easy 句柄的回调函数是独立触发的如果你的回调里访问了共享资源需要自己做同步。另外CURLOPT_TIMEOUT在 multi 模式下依然生效但超时后对应的 easy 句柄会返回CURLE_OPERATION_TIMEDOUT你需要遍历curl_multi_info_read来获取每个请求的最终状态码。验证 multi 接口是否正常工作我一般会开 Fiddler 或者 Wireshark 看并发连接数。如果三个请求几乎同时发出说明 multi 生效了如果是一个接一个检查是不是在循环里调用了curl_easy_perform而不是curl_multi_add_handle。这个错误我在第一次用 multi 时犯过代码看起来像 multi实际还是串行。从那以后我每次集成 libcurl 到新工程都会先跑一个最小 GET 确认链路再跑一个 multi 并发确认事件循环最后才上业务逻辑。这套顺序帮我省下了不少返工时间。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Qt与DFS实现迷宫寻宝可视化:从算法到界面

Qt与DFS实现迷宫寻宝可视化:从算法到界面

1. 从一张空白画布说起:为什么选深度优先搜索做迷宫寻宝很多人第一次接触迷宫类小项目,脑子里蹦出来的第一个念头往往是"用A*算法"或者"用BFS找最短路"。这没错,如果你要的是从入口到出口的最短路径,广度优先…

2026/10/13 5:30:32 阅读更多 →
光流法视觉里程计实战:从Lucas-Kanade原理到代码实现与避坑指南

光流法视觉里程计实战:从Lucas-Kanade原理到代码实现与避坑指南

1. 从特征点匹配到光流追踪:为什么需要换一条路很多人学视觉里程计(Visual Odometry,VO)的时候,第一个上手的方案基本都是特征点法:提取ORB、SIFT之类的关键点,计算描述子,做暴力匹配…

2026/10/13 5:30:32 阅读更多 →
嵌入式工程师拼加班不如拼稀缺度:四维定价模型拆解跳槽薪资真相

嵌入式工程师拼加班不如拼稀缺度:四维定价模型拆解跳槽薪资真相

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

2026/10/13 5:30:32 阅读更多 →

最新新闻

LiteLLM实战:统一大模型API网关的部署、路由与预算控制

LiteLLM实战:统一大模型API网关的部署、路由与预算控制

做AI应用这一年多,我最大的感受是:模型本身其实不是瓶颈,真正让人头大的是怎么把一堆杂七杂八的模型接入、路由、计费、限流这些东西收拾利索。LiteLLM这个开源项目,说白了就是帮你把这件事打包干完——它把市面上主流的大模型API…

2026/10/13 8:38:54 阅读更多 →
大模型Agent技能库设计:从工具调用到编排的工程实践

大模型Agent技能库设计:从工具调用到编排的工程实践

接手 agent-skills 这个选题时,我脑子里马上浮现出前段时间做某客服智能体项目时被技能设计折磨的经历。agent-skills,说白了就是给大模型 Agent 配备的"能力工具箱",让它能按需调用搜索、计算、查库存、发消息这些具体动作。它不是…

2026/10/13 8:38:54 阅读更多 →
CFCA精品可可认证:证书之外,校友网络才是真正的行业入场券

CFCA精品可可认证:证书之外,校友网络才是真正的行业入场券

我见过太多人冲着“证书”去报名,却忽略了证书背后那张真正值钱的关系网。CFCA,一个在精品可可行当里低调但口碑很硬的专业认证项目,它的校友网络是我近几年见过最典型的“证书圈子”组合。精品可可这行,技术固然重要,…

2026/10/13 8:38:54 阅读更多 →
ClickHouse性能调优实战:从system库到工具组合的全链路指南

ClickHouse性能调优实战:从system库到工具组合的全链路指南

1. 调优第一步:把ClickHouse自带的system库当成第一套性能工具箱 接手ClickHouse集群运维的第一年,我踩得最深的一个坑就是:服务变慢之后不知道从哪儿下手抓原因。那时候我习惯先看机器CPU和内存,再翻日志,折腾半小时还…

2026/10/13 8:38:54 阅读更多 →
AI编码工具冲击下,程序员真正的护城河到底是什么?

AI编码工具冲击下,程序员真正的护城河到底是什么?

大约是半年前,我接到一个订单中心模块的重构任务,顺手把一部分“状态流转”的代码丢给了某主流AI编码工具。 当时的心态其实是试探性的,觉得它能生成一个骨架就算成功,毕竟这个模块牵扯到订单取消、超时关单、支付回调、幂等控制…

2026/10/13 8:38:54 阅读更多 →
基于PaddleOCR与PyQt5的GUI车票识别系统设计与实现

基于PaddleOCR与PyQt5的GUI车票识别系统设计与实现

简介:这是一套基于GUI的OCR车票识别完整毕业设计项目,面向计算机视觉、机器学习方向的本科生及入门开发者,重点解决车票日期、车次、座位号等关键信息的自动提取与可视化操作问题。压缩包共82个文件,整体约4.01MB,包含…

2026/10/13 8:37:52 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →