OSG项目GIF插件编译失败怎么办?giflib 4.1.6 64位静态库接入与避坑指南

简介:面向需要在 OpenSceneGraph 3.2.1 中启用 GIF 插件编译的开发者,这份资源提供 giflib 4.1.6 的 64 位静态链接库及配套头文件,可解决 osg 的 Plugin gif 链接依赖问题,省去自行构建 giflib 的环节。压缩包共 3 个文件,包含两个 lib 文件(分别用于常规构建与调试构建)和一个头文件,整体约 83KB,小巧且用途明确。lib 文件用于静态链接,将 GIF 编解码代码直接整合进可执行程序;头文件则提供 API 声明,便于开发者调用读取、写入和处理 GIF 数据的函数。已有 309 人学习下载,适合使用 osg 3.2.1 进行三维图形开发、需要在场景中加载 GIF 图像或动画的中高级开发者。拿到后可直接配置项目链接器并包含相应头文件,快速完成 Plugin gif 的编译集成,避免自行编译带来的版本适配与时间成本。

1. 4.1.6 的 64 位 giflib 静态库:OSG 项目里 GIF 插件总在最后一步翻车

每次编译 OSG 工程,GIF 支持都是那个藏到最后的雷。前面 zlib、png、jpeg 都过了,偏偏在osgdb_gif这一环报找不到 giflib 或者运行时崩在解码函数里。这份资源是 4.1.6 版本的 64 位静态链接库giflib.lib和配套头文件,静态链接进工程后不需要额外携带 DLL,专门解决 OSG 插件加载 GIF 时依赖不透明、路径混乱、Debug/Release 打架的问题。适合正在配 OSG 三维仿真环境、被 32/64 位和动态/静态库折腾过一遍的开发者,也适合做图像序列帧落盘的老项目改造。

2. 为什么是静态库:giflib 在 OSG 插件链里的角色和选型理由

2.1 OSG 的 GIF 插件到底怎么依赖 giflib

OpenSceneGraph 对图片格式的支持走的是插件机制,GIF 对应的插件是osgdb_gif。这个插件本身不写 GIF 解码逻辑,它只负责把osg::Image的数据流桥接到第三方库 giflib 上。giflib 提供DGifOpenFileHandle、DGifSlurp、DGifGetLine这套 C 接口,OSG 插件拿到文件句柄后交给 giflib 解码,再回填像素数据。所以只要 OSG 打开了 GIF 插件,构建时就必须让 CMake 找到 giflib 的头文件和库文件,找不到就直接把osgdb_gif这个插件关掉,程序跑起来不报错,但读 GIF 永远是NULL。

这个依赖关系非常隐蔽。很多开发者以为 OSG 自带 GIF 支持,其实自带的是插件框架,真正的解码器还是要靠 giflib。常见做法是先用 vcpkg 装一份 giflib,但 vcpkg 默认经常给出动态库的 import lib 和一大堆运行时 DLL,OSG 的 CMake 脚本去查找时容易挑到不对的那份。更稳的方式是把这份 4.1.6 的 64 位静态 lib 和头文件放到独立目录,用CMAKE_PREFIX_PATH指过去,让插件链接器只认这一处。

2.2 静态库对比动态库:省掉 DLL 部署的坑

动态库的好处是节省内存、能让多个程序共享同一份代码,但在 Windows 上部署成本很高。giflib 作为动态库时要同时分发主 DLL,运行目录里多出giflib.dll或类似名字的文件。OSG 插件本身已经是 DLL,osgdb_gif.dll在运行时会动态加载 giflib 的 DLL,只要系统 PATH 里有另一个版本的 giflib,或者目录里少了依赖,插件加载就静默失败,程序不崩、日志没有,只有读取结果为空。

静态库把 giflib 的机器码直接编进osgdb_gif插件,运行时不找任何 giflib 的 DLL,自然绕开部署顺序和 PATH 污染问题。代价是插件体积大一点,链接时间稍长,但换来的是发布包干净。对比下来,对 OSG 这种插件多、依赖杂的工程,静态库明显省心。

对比项动态库 giflib.dll静态库 giflib.lib
发布依赖需要额外拷贝 DLL 到运行目录无额外运行时
版本冲突系统 PATH 里其他 giflib 可能干扰编译进插件后不易冲突
调试体验需要保证 PDB 匹配可以直接单步进解码函数
插件体积较小会增大几十到上百 KB
OSG CMake 查找需要找到 import lib 和 DLL只需 .lib 和头文件

2.3 64 位与 32 位混用为什么必崩

OSG 如果整体按 64 位编译,所有第三方库也必须按 64 位提供。32 位的 lib 在链接阶段就会报LNK2038或者LNK1112,这是比较容易发现的。真正折磨人的是运行时崩溃:giflib 的GifFileType结构体里包含指针、整数、回调函数指针,32 位和 64 位下结构体布局完全不同。如果用了错误的 lib,链接器偶尔能过,但 OSG 插件把文件句柄传进去后,giflib 按错误的偏移读取字段,数据结构直接错位,程序跑几十帧甚至几百帧后才在解码附近崩掉,这种问题几乎没法从调用栈看出根因。

所以拿到 lib 第一件事就是确认位数。资源包名称明确写了 64 位,配合 VS 的 x64 配置使用就不会踩这个坑。另外版本也要锁死,giflib 4.1.6 的 API 和 OSG 老版本插件的兼容性经过验证,5.x 系列改了不少内部接口,直接替换头文件会让GifFileType的成员对不上,所以别顺手把版本升级了。

3. 把资源接进工程:VS 与 CMake 两种配置路径

3.1 文件清单和目录摆放

资源包里核心内容是 64 位静态库giflib.lib和头文件,正常构建只需要gif_lib.h。有些构建流程会额外生成gif_lib_configure.h,比如某些平台宏定义,如果资源包里带了就一起放好。我一般会在工程根目录建一个thirdparty文件夹,把所有第三方库固定住,方便多台机器同步和后续换版本。

giflib-4.1.6-x64/ include/ gif_lib.h gif_lib_configure.h lib/ giflib.lib

这个目录结构有两个作用:一是让 CMake 的find_path和find_library能快速命中,二是保证头文件路径和库目录永远不会混到系统盘里的其他 giflib。必须确认 include 目录下只有这一份头文件,否则#include <gif_lib.h>会优先搜到工程配置里靠前的其他路径。

3.2 Visual Studio 下配置附加依赖

VS 工程手动配置时,最快捷的路子是写一个.props属性表。这样不用每个项目点一遍属性页,直接引用一份公用配置。

<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemDefinitionGroup> <ClCompile> <AdditionalIncludeDirectories>$(SolutionDir)thirdparty\giflib-4.1.6-x64\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <AdditionalLibraryDirectories>$(SolutionDir)thirdparty\giflib-4.1.6-x64\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalDependencies>giflib.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> </Project>

这个属性表里的$(SolutionDir)假设每个解决方案都带上thirdparty目录。如果用了$(ProjectDir)想做成相对当前项目,需要把属性表放在项目文件同级或子目录里,否则路径会解析成属性表所在目录,这是新手最容易翻车的地方。设置完记得在项目属性里确认包含目录已经生效,打开 C/C++ 预处理器日志能看到实际搜索顺序。

3.3 CMake 找 giflib 的写法

用 CMake 构建 OSG 时,最直观的做法是直接指定头文件和库的绝对路径。我一般会把 giflib 的路径独立成一个变量,既方便切换 32/64 位版本,也方便日后替换成 5.x 时只改一处。

set(GIFLIB_ROOT "G:/thirdparty/giflib-4.1.6-x64" CACHE PATH "giflib 4.1.6 x64 static lib root") find_path(GIFLIB_INCLUDE_DIR NAMES gif_lib.h PATHS ${GIFLIB_ROOT}/include NO_DEFAULT_PATH) find_library(GIFLIB_LIBRARY NAMES giflib PATHS ${GIFLIB_ROOT}/lib NO_DEFAULT_PATH) if(GIFLIB_INCLUDE_DIR AND GIFLIB_LIBRARY) add_library(GIFLIB::GIFLIB STATIC IMPORTED) set_target_properties(GIFLIB::GIFLIB PROPERTIES IMPORTED_LOCATION "${GIFLIB_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${GIFLIB_INCLUDE_DIR}") endif()

NO_DEFAULT_PATH是关键,加上之后 CMake 就不再扫描系统默认路径,避免找到 vcpkg 或系统盘里另一份 giflib。find_library的NAMES只写了giflib,因为静态库文件名在 Windows 上就是giflib.lib,如果某些构建产物叫libgif.lib,可以追加一个名字进去。随后在 OSG 的 CMake 配置界面里,把GIFLIB_INCLUDE_DIR和GIFLIB_LIBRARY的缓存变量指到这个自定义的 target 路径即可,OSG 构建脚本会优先使用你提供的库。

4. 避坑:链接错误、崩溃与路径玄学的五个记录

4.1 现象:LNK2038 或者 LNK2001:unresolved external symbol

链接时一直在报LNK2038,有的甚至报unresolved external symbol _DGifOpenFileName,但明明已经加了giflib.lib。原因多半是运行时库配置不匹配。giflib 4.1.6 在 Windows 上可以编成/MD或/MT,如果静态库用/MT编译,而你的工程默认是/MD,链接器会拒绝混用,报的却和符号缺失类似。解决方法是先在 VS 项目属性里看 C/C++ 代码生成的运行时库,确认是/MD还是/MT,再去找匹配的 lib。我一般优先用/MD的 Release 静态库,因为 OSG 官方构建也是动态运行时,这样最不容易冲突。

4.2 现象:运行到 DGifSlurp 附近崩溃,堆栈显示在 gif_lib 内部

程序能起来,读普通文件也正常,一旦碰到 GIF 就崩,调用栈停在DGifSlurp附近。原因一般不是逻辑问题,而是调用约定不匹配。giflib 的 C 接口默认是__cdecl,如果工程为了调用某些第三方库把整个项目的调用约定改成了__stdcall,函数符号会被修饰成另一种形式,链接有时能过,运行时栈平衡却出错。解决方法是检查项目属性里 Calling Convention 是不是__cdecl,尤其注意是否在 C/C++ 高级选项里全局加了/Gz。整个 OSG 项目链路的调用约定必须一致,只在局部单独调 giflib 反而更麻烦。

4.3 现象:头文件和 lib 版本对不上,秒报 GifFileType 大小不一致

代码里没写任何 giflib 相关的东西,编译却报某个结构体大小冲突,或者sizeof(GifFileType)在不同编译单元里不一样。这通常因为 include 目录里混入了多份 giflib 头文件。系统盘、vcpkg 路径、工程目录各有一份,编译器按AdditionalIncludeDirectories的顺序取了某一版,链接时又用了另一版。解决方法是把其他所有 giflib 的 include 路径从工程里移除,只保留 4.1.6 的资源包路径。为了验证,可以写一个空程序打印sizeof(GifFileType),然后重新编译 giflib 源码对比,确认结构体布局一致。

4.4 现象:osgdb_gif.dll 生成存在,但运行时报 Unable to load plugin

构建阶段一切正常,OSG 插件目录里也有osgdb_gif.dll,运行程序却提示无法加载插件。原因往往是插件动态链接了 giflib 的 DLL,而运行环境里没有。即使链接时给的是静态giflib.lib,如果工程里同时存在动态库的 import lib,且命名优先级更高,链接器会优先采用动态版本。解决方法是检查链接器的附加依赖项里是否有其他 giflib 相关条目,再用dumpbin /dependents查看插件 DLL 里是否包含 giflib.dll 依赖。静态链接成功时,插件只依赖系统 DLL 和 OSG 核心 DLL。

4.5 现象:Debug 程序链接 Release 库,数据错乱、偶发崩溃

这种方式最隐蔽:Debug 配置下程序能跑,但读 GIF 时像素数据随机错乱,偶尔还崩。原因是 Debug 运行时和 Release 运行时各自管理堆,giflib 在内部用 malloc/free 分配和释放内存,如果它在 Release 库里分配,而 OSG 的 Debug 代码释放,跨越两个不同的 CRT 堆就会出问题。解决方法是严格保持 Debug 工程链 Debug 库、Release 工程链 Release 库。如果资源包只提供了 Release 静态库,最省事的方式是把 GIF 读取逻辑封装到独立的 Release 静态模块里,让 OSG 主工程只通过接口拿数据,不直接跨 CRT 边界操作内存。

5. 接入 OSG 后验证 GIF 读写:一个小例子和参数说明

5.1 用 OSG 读 GIF 的代码骨架

配置完成后,先写一个最小的读取流程验证链路通了没有。这里只需要osgDB::readImageFile,它内部会经过插件机制找到osgdb_gif,再走进 giflib。

#include <osg/Image> #include <osgDB/ReadFile> bool loadGif(const char* path) { osg::ref_ptr<osg::Image> image = osgDB::readImageFile(path); if (!image) { return false; } const osg::Image* img = image.get(); printf("width=%d height=%d format=0x%x\n", img->s(), img->t(), img->getPixelFormat()); return img->data() != nullptr; }

这段代码里,readImageFile返回空指针基本可以断定插件没有生效,或者路径下的资源根本加载不到。getPixelFormat打印出来的值可以拿来验证解码结果,GIF 是索引颜色,正常情况下 OSG 会转换成 RGBA 或带调色板格式。如果打印结果是0,说明图片数据没被正确填充。还有个细节:GIF 动图在 OSG 里会解码成多个帧,readImageFile读的是第一帧,如果要取全部帧需要单独处理osg::Image的帧序列接口,那是另一个话题。

5.2 验证静态库确实生效:检查插件依赖

最硬核的验证方式是用dumpbin查看生成的插件 DLL 依赖列表。

dumpbin /dependents Release/osgPlugins-3.6.5/osgdb_gif.dll

输出里如果出现giflib.dll,说明链接时实际用的是动态库的 import lib,静态链接没有成功。如果输出里只有osgDB.dll、osg.dll以及系统库,说明 giflib 已经静态编进去了。注意dumpbin需要从 VS 开发者命令行里运行,普通 cmd 环境下不一定能直接调用。没有dumpbin时,也可以用Dependencies工具看同一份信息,重点看是否出现 giflib 相关条目。

5.3 常见误用:把 lib 当 dll 拷进运行目录

这个错误几乎每周都能见到:拿到giflib.lib后,习惯性地把它复制到 exe 所在的运行目录,然后疑惑为什么还是报找不到 giflib。静态库的.lib只在链接阶段起作用,链接完成后程序里根本不需要这个文件。运行目录里多放一份反而容易误导人。正确做法是让链接器通过"附加库目录"找到它,而不是靠运行目录。如果发布时发现目录里存在 giflib 相关文件,大概率是混用了动态库方案,需要回去检查依赖。

6. 进阶技巧:把 giflib 静态库封装成第三方模块,换版本只改一处

当工程里同时有 zlib、png、jpeg 和 giflib 时,逐个项目写附加目录会变得很难维护。我习惯在 OSG 工程里建立一个thirdparty_giflib的 INTERFACE 库,把所有路径和依赖集中封装。

set(GIFLIB_ROOT "G:/thirdparty/giflib-4.1.6-x64" CACHE PATH "" FORCE) add_library(thirdparty_giflib INTERFACE) target_include_directories(thirdparty_giflib INTERFACE ${GIFLIB_ROOT}/include) target_link_libraries(thirdparty_giflib INTERFACE ${GIFLIB_ROOT}/lib/giflib.lib) # 可选:让编译期知道使用的是静态库 target_compile_definitions(thirdparty_giflib INTERFACE GIFLIB_USE_STATIC=1)

这样 OSG 或其他子模块只需要在target_link_libraries里写thirdparty_giflib,不用关心头文件位置、lib 路径和版本号。以后想升级 giflib 5.x,就改GIFLIB_ROOT一个变量,或者把目录切到新版本路径,工程里的引用完全不用动。

我还会为这个 INTERFACE 库加一个自检的小测试程序:直接调用DGifOpenFileName读取一个已知 GIF 文件,确认返回句柄非空、帧数据长度符合预期。这个测试放在 CI 或本地构建脚本里,每次换库版本后跑一遍,能立刻发现 API 变更或结构体布局问题,比等 OSG 插件运行时崩溃要高效得多。

在动手之前会再确认一件事:用dumpbin /headers giflib.lib查看机器类型是x64,然后检查运行时库选项。从那以后我每次配 OSG 的第三方图像库,都强制走一遍"目录固定、架构确认、依赖检查"三个动作,再也不让 GIF 插件在最后一步翻车。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

微电网两阶段鲁棒优化调度:CCG算法应对风光不确定性

微电网两阶段鲁棒优化调度:CCG算法应对风光不确定性

1. 微电网优化调度为什么要考虑不确定性 做园区级微电网调度的人应该都有过这种体会&#xff1a;今天光伏预测曲线明明很漂亮&#xff0c;上午十点突然飘来一片云&#xff0c;出力直接砍半&#xff1b;或者风电场那边预报微风&#xff0c;结果下午风速爬升&#xff0c;风机满发…

2026/10/20 14:34:30 阅读更多 →
AI气象数据融合实现流感提前两周预警的完整实践

AI气象数据融合实现流感提前两周预警的完整实践

流感预警这件事&#xff0c;难点从来不在“发现”&#xff0c;而在“提前”。我在复现某区域流感预警Demo系统时&#xff0c;核心目标只有一个&#xff1a;在流感监测曲线还没来得及明显抬头之前&#xff0c;用AI气象数据融合的方式提前两周给出区域风险判断。很多人问我&#…

2026/10/20 14:34:30 阅读更多 →
深入理解TensorFlow 2.x自动求导:GradientTape原理、实践与排坑指南

深入理解TensorFlow 2.x自动求导:GradientTape原理、实践与排坑指南

很多人从 TensorFlow 1.x 迁移过来&#xff0c;第一件事就是找tf.gradients&#xff0c;然后一脸懵&#xff1a;没了&#xff0c;取而代之的是一个叫tf.GradientTape的东西。更懵的是&#xff0c;新写的训练代码里看不到"计算图"这种概念&#xff0c;梯度就像变魔术一…

2026/10/20 14:34:30 阅读更多 →

最新新闻

开放式代码评审框架实践:规则引擎与质量门禁的自动化设计

开放式代码评审框架实践:规则引擎与质量门禁的自动化设计

先放结论&#xff1a;如果你所在团队还在靠“人来人”式的人工评审推进代码质量&#xff0c;大概率会碰到这么几个痛点——评审覆盖不全、周期被拉长、新人评审标准混乱&#xff0c;以及线上问题回溯时说不清楚当时的评审上下文。open-code-review这个项目&#xff0c;我是奔着…

2026/10/20 15:21:05 阅读更多 →
C# USB通信实战:基于LibUsbDotNet的设备枚举、读写与避坑指南

C# USB通信实战:基于LibUsbDotNet的设备枚举、读写与避坑指南

简介&#xff1a;这是一份面向C#开发者与USB上位机开发入门者的实战资源&#xff0c;围绕libusbDotNet库讲解如何在.NET环境中枚举、打开USB设备并完成端点读写&#xff0c;适合需要对接自定义USB硬件、调试批量或中断传输的工程师参考。压缩包共236个文件&#xff0c;约4.05MB…

2026/10/20 15:21:05 阅读更多 →
Qwen3快速搭建指南:从环境配置到模型加载与踩坑避雷

Qwen3快速搭建指南:从环境配置到模型加载与踩坑避雷

”和最终回答&#xff1b;如果不需要思考过程&#xff0c;要设置enable_thinkingFalse。具体写法&#xff1a;model.generate时加上 enable_thinkingFalse&#xff1f;在官方实现中&#xff0c;generate有enable_thinking参数&#xff08;Qwen3的generation_config&#xff09;…

2026/10/20 15:21:05 阅读更多 →
CSS表单标签两端对齐实战:伪元素+text-align方案详解

CSS表单标签两端对齐实战:伪元素+text-align方案详解

1. 表单标签对齐的常见痛点与核心需求做过中后台系统或者数据录入类页面的前端同学&#xff0c;大概率都碰到过这样一个场景&#xff1a;产品经理拿着设计稿走过来&#xff0c;说“这些表单的标签能不能对齐一下&#xff0c;现在看着太乱了”。你低头一看&#xff0c;确实&…

2026/10/20 15:21:05 阅读更多 →
服务调用方式设计:从同步异步到REST与RPC的选型与实践

服务调用方式设计:从同步异步到REST与RPC的选型与实践

做项目这些年&#xff0c;“服务之间怎么互相调用”这件事&#xff0c;比业务代码本身更让人睡不着。项目服务调用方式看似只是技术选型里的一小环&#xff0c;实际上一旦定错&#xff0c;后续的排查、维护、扩展都会还债。我见过太多系统因为HTTP和RPC混用得一塌糊涂、同步异步…

2026/10/20 15:21:05 阅读更多 →
Vibe Coding:用自然语言造工具,普通人也能自动化

Vibe Coding:用自然语言造工具,普通人也能自动化

1. 从“会说话”到“会造工具”到底在说什么第一次听到“Vibe Coding”这个词&#xff0c;很多人会以为是某种新出的编程语言或者框架。其实不是。它描述的是一种正在悄悄改变普通人做事方式的范式&#xff1a;你不再需要先学会写代码&#xff0c;再去解决问题&#xff1b;而是…

2026/10/20 15:20:04 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →