ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

VTK 9.3.1 + Qt 5.15.2 + VS2019 编译实战:从SDK构建到部署指南

VTK 9.3.1 + Qt 5.15.2 + VS2019 编译实战:从SDK构建到部署指南 简介面向需要在VS2019与Qt5.15.2环境下开展三维可视化开发的C工程师这款VTK 9.3.1预编译SDK包可直接集成到x64工程省去从源码编译VTK的复杂配置过程。包内同时提供Debug与Release两种构建结果兼顾调试排查与最终发布需求适合医学成像、科学计算可视化及三维交互应用等场景的中高级开发者快速搭建开发环境。压缩包共2000个文件以1944个h头文件和56个hpp头文件为主涵盖VTK核心模块、渲染管线及HDF5等依赖库接口整体大小约120.06MB目录结构清晰便于按模块检索引用。目前已有437人学习下载还附带了对应编译过程博客可帮助读者理解构建细节并在必要时自行定制。相比手动编译该资源能明显缩短环境准备时间让开发者将精力集中在渲染算法与业务功能实现上头文件内容覆盖常用可视化流程可作为项目模板直接参与链接与编译降低上手门槛。1. 为什么要亲自编译一份 VTK 9.3.1 VS2019 Qt 5.15.2 的 SDK 包“最新版本 VTK 9.3.1 VS2019 Qt 5.15.2 编译 SDK 包包含 x64 位下的 debugrelease 编辑结果”这句话准确说指的是编译结果。很多团队在医学影像、工业仿真、三维测量这类桌面软件里都需要在 Qt 窗口中嵌入 VTK 的渲染视口而 VTK 官方并不提供面向 Qt 的 Windows 预编译 C 库。要拿到能在自己的软件里 findViewById、setRenderWindow 的库文件唯一可靠路径是用 VS2019 配着 Qt 5.15.2 的 msvc2019_64 把 VTK 9.3.1 源码完整编一遍然后再把 debug/release 两套产物整理成 SDK 分发。这个过程搜索一下能看到大量帖子但能一次编通的人不多问题多出在 Qt 版本匹配、模块开关和 DLL 部署上。2. VTK 9.3 绑上 Qt 5.15.2这套组合的底层逻辑和选型理由2.1 VTK 9.x 模块化之后的 Qt 集成方式VTK 从 9.0 开始做了非常大的工程结构调整到了 9.3.1 依然延续这套模块化体系。老教程里常见的VTK_QT、QVTKWidget、vtkRenderWindowInteractor直接手动 new 的写法在 9.x 下已经不能照搬。9.x 把 Qt 支持拆成了独立模块最核心的是GUISupportQt它负责让 VTK 的渲染窗口能和 QWidget 体系互相通信另外还有RenderingQt提供一些基于 Qt 的辅助渲染类。模块化带来的直接变化是 CMake 配置粒度变了。以前编译 VTK 常常是“一把梭”把所有功能都编进去9.x 之后官方更推荐按需开启模块。面向 Qt 的开发核心是打开GUISupportQt它内部会去找 Qt5 的 Widgets、Gui、OpenGL 等组件并且要求 Qt 的版本、位数、编译器必须和 VTK 编译时完全一致。这一点也正是很多人编译失败的第一现场Qt 装了好几个版本CMake 找到的是 Qt6 或者 32 位的 Qt5最后 MOC 报错或者链接器找不到符号。另外一个容易被忽略的是VTK_MODULE_INIT这套模块初始化机制。老版本 VTK 在程序启动时靠vtkAutoInit.h里的宏把渲染后端注册进去9.x 下如果通过 CMake 的 target 链接方式使用 VTK构建系统会自动生成模块初始化代码但如果你的工程像很多老博客那样直接 link 整个vtk.lib往往需要手动加VTK_MODULE_INIT(vtkRenderingOpenGL2)否则运行时会提示“no override found for vtkRenderWindow”。这就是为什么同样一份 SDK有人拿回去能跑有人拿回去就报错。2.2 Qt 5.15.2 与 MSVC v142ABI、库后缀和选择理由Qt 5.15.2 是 Qt 官方最后一个对 VS2019 提供完整预编译支持的 LTS 版本官方安装包里对应的就是msvc2019_64这个目录。微软在 VS2019 里的 C 工具集叫 MSVC v142Qt 5.15.2 的 Windows 预编译库就是用 v142 编的所以两者 ABI 天然匹配。如果非要用 Qt 6.xVTK 9.3 也不是不能编但 Qt 6 在 OpenGL 窗口、平台插件上的改动明显更大调试成本高没有非换不可的理由。这里有一个很关键的点Windows 上的 Qt 库有两种命名release 版叫Qt5Core.dll、Qt5Widgets.dlldebug 版叫Qt5Cored.dll、Qt5Widgetsd.dll带不带d后缀是区分调试版和发布版最直接的手段。VTK 的 debug 版 DLL 同样会用d后缀区分比如vtkCommonCore-9.3d.dll。这意味着 SDK 里的 debug 和 release 产物绝不能混着用一旦程序同时加载了 release 的 Qt5Core.dll 和 debug 的 vtkCommonCore-9.3d.dll轻则启动崩溃重则出现内存被写坏的随机错误而且这种错误极难排查。CMAKE_PREFIX_PATH这个变量在整个编译里的作用就是告诉 CMake“去哪里找 Qt”。我一般会把它精确指到C:/Qt/5.15.2/msvc2019_64而不是指到C:/Qt/5.15.2。两者的区别在于指到总目录时CMake 有可能找到同层级里的 MinGW 版本或者 32 位版本指到msvc2019_64则从根本上锁定了编译器和位数。VS2019 的安装教程和产品密钥问题不属于本文范围但有一点值得提醒如果是全新机器VS2019 必须勾选“使用 C 的桌面开发”工作负载并安装 Windows 10 SDK 组件否则 CMake 在配置阶段会因为缺少Windows Kits报错。2.3 需要提前检查的 CMake 变量与 Qt 组件完整度编译之前先确认 Qt 安装目录下的 CMake 配置文件是不是齐全。打开命令行执行dir C:\Qt\5.15.2\msvc2019_64\lib\cmake如果这个目录里能看到Qt5、Qt5Core、Qt5Gui、Qt5Widgets、Qt5OpenGL这些子目录说明 Qt 的 CMake 支持文件没问题。只有 Qt 的二进制库而没有 CMake 配置文件VTK 的 CMake 阶段是找不到 Qt5 的。常见于只拷贝了别人的 Qt 目录、没有用官方安装器装的情况。我习惯把下面几个变量单独写在一个文本文件里方便换机器时保持一致CMake 变量推荐值作用VTK_QT_VERSION5强制 VTK 找 Qt5避免误选 Qt6VTK_GROUP_QTON打开 VTK 的 Qt 相关模块组VTK_MODULE_ENABLE_VTK_GUISupportQtYES显式启用 Qt 支持模块找不到 Qt 时直接报错而不是跳过VTK_RENDERING_BACKENDOpenGL29.x 的默认渲染后端是 OpenGL2一般不乱动VTK_BUILD_TESTINGOFF关掉 VTK 自带测试大幅缩短编译时间VTK_WRAP_PYTHONOFF不需要 Python 接口时关闭减少不必要的 wrapper 生成BUILD_SHARED_LIBSON编出 DLL 形式的 SDK便于程序运行时独立更新其中VTK_MODULE_ENABLE_VTK_GUISupportQt的取值里YES表示“必须启用找不到就报错”WANT表示“能找到就启用找不到就算了”。第一次编强烈建议用YES这样 Qt 环境有问题会在 CMake 配置阶段直接暴露出来而不是等编译到一半才失败。3. 用 VS2019 编译出 x64 下的 Debug 和 Release 版本3.1 命令行触发 CMake最小配置命令与逐项说明VTK 9.3.1 拿到源码之后我一般不用 CMake GUI因为 GUI 的缓存容易残留旧变量。用命令行配置更可控而且能把这套命令直接写进团队文档。下面是 Windows 下 cmd 可用的完整配置命令cmake -S D:/vtk-9.3.1 -B D:/vtk-9.3.1-build ^ -G Visual Studio 16 2019 -A x64 ^ -DCMAKE_PREFIX_PATHC:/Qt/5.15.2/msvc2019_64 ^ -DVTK_QT_VERSION5 ^ -DVTK_GROUP_QTON ^ -DVTK_MODULE_ENABLE_VTK_GUISupportQtYES ^ -DVTK_RENDERING_BACKENDOpenGL2 ^ -DVTK_BUILD_TESTINGOFF ^ -DVTK_WRAP_PYTHONOFF ^ -DBUILD_SHARED_LIBSON这里用的是 cmd 的^续行符Linux shell 习惯的\在 Windows cmd 里不生效直接复制到命令行会报错。-G Visual Studio 16 2019的 16 是指 VS2019 的内部版本号VS2022 对应 17这个不能混。-A x64指定生成 64 位工程如果省略它CMake 默认生成的是 Win32 工程后面编译出的库在 x64 程序里根本链接不上。CMAKE_PREFIX_PATH是这一堆参数里最需要检查的。Qt 5.15.2 安装后msvc2019_64目录下的lib/cmake/Qt5才是 CMake 真正读取的位置。配置完成后观察输出如果能看到类似Found Qt5: C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5的字样说明 Qt 找到了。如果显示Found Qt6那就是没加-DVTK_QT_VERSION5或者缓存没有清理干净。配置成功后会生成VTK.sln这个解决方案里的项目数量视模块开关而定通常几十个项目全部编译需要较长时间。3.2 在 VS2019 里分批构建 Debug 和 Release用 VS2019 打开D:/vtk-9.3.1-build/VTK.sln先把解决方案配置切到Debug平台切到x64右键ALL_BUILD生成。这一步会按依赖顺序把 VTK 的 Core、Rendering、Interaction、GUISupportQt 等模块全部编成 DLL。完成后再切到Release重新生成一次。有人会在 CMake 阶段用-DCMAKE_BUILD_TYPEDebug来编 debug这是 Linux Makefile 生成器的习惯在 VS 这种多配置生成器下是无效的CMAKE_BUILD_TYPE会被忽略。VS 生成器天然支持一台机器上同时保留 Debug 和 Release 两套产物它们分别输出到bin/Debug和bin/Releaselib/Debug和lib/Release互不覆盖。这也是为什么“包含 x64 位下的 debugrelease 编译结果”这件事从工程结构上就是成立的。编译时不要一上来就并行拉满。我第一次编的时候直接默认值全开结果 Debug 和 Release 同时在后台跑CPU 满载导致内存不足其中一个模块编译进程被系统杀掉事后还得清理中间文件重来。更稳妥的做法是用 VS 的“批生成”功能先勾选ALL_BUILD的 Debug x64 生成完成后再单独生成 Release x64。如果机器内存只有 16G建议在 VS 的选项里把 MSBuild 的并行编译数限制到 4 个进程。3.3 确认编译产物齐全DLL、LIB、头文件与 moc 文件编译完成后检查D:/vtk-9.3.1-build/bin/Debug和bin/Release两个目录。VTK 9.3.1 的 DLL 命名带版本号比如vtkCommonCore-9.3.dll、vtkCommonDataModel-9.3.dll、vtkRenderingOpenGL2-9.3.dll、vtkGUISupportQt-9.3.dll。Debug 版会多一个d例如vtkGUISupportQt-9.3d.dll。如果 Debug 目录里出现不带d的vtkGUISupportQt-9.3.dll说明 CMake 在配置时找到了 Qt 的 release 库把 debug 和 release 的 Qt 路径搞混了后面运行阶段大概率会出问题。头文件在D:/vtk-9.3.1-build/include/vtk-9.3下Qt 相关的是QVTKOpenGLNativeWidget.h、QVTKOpenGLWindow.h这几个。这里注意9.3 里已经看不到老版本的QVTKWidget.h了如果程序里 include 的还是它就是代码没有跟着 VTK 版本走。lib目录下同样区分上下两个目录Debug 下的.lib也带d后缀。整个 VTK 构建目录里真正可以对外分发的就是include、lib、bin这三个内容加上必要的cmake配置文件。4. 整理 SDK 包目录结构、DLL 部署与 install 规则4.1 用 cmake --install 导出独立的 Debug/Release SDK构建目录里的产物是给 VTK 自己用的直接拷贝也能用但目录太乱而且bin下混着可执行示例和测试程序。更干净的做法是让 CMake 的 install 规则来导出 SDK。在 VS2019 里对INSTALL项目生成或者用命令行cmake --install D:/vtk-9.3.1-build --config Debug --prefix D:/VTKSDK/vtk-9.3.1/debugcmake --install D:/vtk-9.3.1-build --config Release --prefix D:/VTKSDK/vtk-9.3.1/release两条命令分别执行得到两个独立目录debug目录里是带d后缀的库和 Debug 版 Qt 依赖release目录里是干净版本。这种分目录结构比把 debug 和 release 塞进同一个bin下稳妥得多因为在 Windows 上同名 DLL 放在同一个目录里时后拷贝的会覆盖先拷贝的最后只剩一套文件配置信息全丢。install 之后debug/lib/cmake/vtk-9.3和release/lib/cmake/vtk-9.3下会有 VTK 的 CMake 配置文件这是后面供其他工程find_package(VTK)使用的核心。有人把 SDK 分发出去后发现对方find_package找不到多半是少了这个 cmake 子目录。4.2 把 Qt 5.15.2 的运行库一并纳入部署计划VTK 的 Qt 模块只是一个“壳”运行时仍然依赖 Qt5Core、Qt5Gui、Qt5Widgets、Qt5OpenGL 这些 Qt 本身的 DLL。SDK 包给别人的时候如果不带 Qt对方机器要么配好系统 PATH 指向 Qt 的msvc2019_64/bin要么就得用 windeployqt 把依赖打到程序目录。我通常会在 SDK 的每个版本目录里放一个runtime/文件夹里面是 Qt 的运行时用 windeployqt 生成C:/Qt/5.15.2/msvc2019_64/bin/windeployqt.exe --release D:/VTKSDK/vtk-9.3.1/release/runtime/MyVTKApp.exewindeployqt 会扫描 exe 的导入表把 Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll 以及platforms/qwindows.dll拷贝到指定目录。注意--release和--debug必须和程序配置一致否则会把带d后缀的 Qt DLL 打出来发布给客户时会出现“在开发者机器上能跑客户机器上启动就闪退”的典型事故。SDK 里也可以不给 Qt 运行时只在文档里声明“本 SDK 要求目标机安装 Qt 5.15.2 msvc2019_64并设置QT_PLUGIN_PATH到 Qt 的 plugins 目录”。但按我的经验把这个要求交给客户去理解十有八九会出现平台插件找不到的报错。宁可 SDK 体积大一点也要把运行时一起带齐。4.3 一个适合团队分发的 SDK 目录约定整理好的 SDK 大概长这样D:/VTKSDK/vtk-9.3.1/ ├── debug/ │ ├── bin/ # 带 d 后缀的 VTK DLL │ ├── lib/ # 带 d 后缀的 LIB 和 cmake 配置 │ ├── include/ # vtk-9.3 头文件 │ └── runtime/ # Qt debug 运行时 ├── release/ │ ├── bin/ │ ├── lib/ │ ├── include/ │ └── runtime/ └── README.mddebug 和 release 各带一份include虽然内容一样但对使用方来说最简单——不用在 CMake 里来回切换 include 路径。lib里的cmake/vtk-9.3目录保持 install 原样不要手动改动里面的.cmake文件否则使用时会出现版本变量解析错误。README 里只写三件事这个包是 VS2019 Qt 5.15.2 x64 编的debug 和 release 不能混用运行时需要把对应bin目录加入 PATH 或用windeployqt部署。5. 避坑VTK 与 Qt 组合编译里最容易翻车的五个环节5.1 CMake 找到 Qt6 导致 MOC 编译失败现象配置阶段没有报错编译到 guisupportqt 相关项目时报unknown option --no-keyword或者一堆 MOC 类错误查看 CMake 缓存发现Qt6_DIR被设置了。原因机器上同时装了 Qt 5.15.2 和 Qt 6.xCMake 的find_package(Qt)在没有显式指定版本时优先匹配了 Qt6而 VTK 的 QVTK 代码是按 Qt5 接口写的。解决删掉构建目录里的CMakeCache.txt重新配置并且在命令行里加上-DVTK_QT_VERSION5 -DQt5_DIRC:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5。不要怕删缓存VTK 重新 configure 也就是几分钟的事比带着脏缓存反复试要快。这条也适用于换 Qt 版本、换编译器之后不重新配置就直接编译的情况。5.2 Debug 版 VTK 链接到了 Qt 的 release 库现象Release 跑得好好的Debug 版一进入渲染就崩溃甚至在 QApplication 初始化阶段就异常。用 dumpbin 查看依赖发现 debug 的vtkGUISupportQt-9.3d.dll依赖的是Qt5Core.dll而不是Qt5Cored.dll。原因CMAKE_PREFIX_PATH指到了C:/Qt/5.15.2/msvc2019_64没错但 Qt 的 debug 和 release.lib在同一个目录下靠文件名后缀区分如果构建缓存里残留了之前指向 release 的 Qt 路径或者配置时用了 32 位调试器启动 CMake就会匹配错误。解决重新配置前清理CMakeCache.txt和CMakeFiles目录然后在CMakeCache.txt里确认Qt5Core_DIR的路径。更严格的做法是配置完成后打开D:/vtk-9.3.1-build/CMakeCache.txt搜Qt5Core看实际指向。宁可慢一次不要等到程序崩溃再回头查。5.3 Debug 和 Release 的 DLL 混在一个目录现象程序能启动但运行一段时间后随机崩溃有时是渲染线程崩有时是退出时崩而且 Release 崩溃率低于 Debug很难稳定复现。原因把 SDK 的 debug 和 release 两个bin目录都加进了系统 PATHWindows 加载 DLL 时按 PATH 顺序找到同名文件就加载。vtkCommonCore-9.3d.dll和vtkCommonCore-9.3.dll虽然文件名不同但程序里如果同时用不同配置的模块可能出现某个模块先加载了 Qt5Core另一个模块又要求 Qt5Cored两边对同一个全局状态做不同处理内存布局不一致。解决程序运行目录里只放当前配置对应的那一份 DLL。SDK 里 debug 和 release 分开目录的意义就在这里宁可程序员手动切目录也不要图省事混着用。检查时用dumpbin /dependents列出 exe 依赖的所有 DLL确认全部来自同一配置。5.4 Qt 在线安装器缺少模块导致找不到 Qt5::OpenGL现象CMake 配置时报Could not find a package configuration file provided by Qt5OpenGL或者类似 Qt5Xml、Qt5Svg 找不到。原因Qt 5.15.2 的官方在线安装器在默认勾选项里组件并不是全部到位的尤其容易缺 OpenGL、Xml、Svg 这类“看起来用不上但 VTK 需要”的模块。有明确热搜提到“qt5.15.2在线安装工具没有webassembly模块”这类组件缺失问题和它是一类。解决打开 Qt 维护工具在“添加/移除组件”里找到 Qt 5.15.2 下的MSVC 2019 64-bit这一项展开后把 Desktop 相关组件全部勾上重点检查Qt 5.15.2 Additional Libraries和 Qt Debug Information Files。补装完成后重新配置 VTK。如果不想补装可以在 CMake 里把VTK_MODULE_ENABLE_VTK_GUISupportQt从YES改成WANT绕过但那样编出来的 SDK 其实没有 Qt 支持简化为不启用 Qt 的渲染库使用价值大打折扣。5.5 ALL_BUILD 编译时间过长、内存不足导致中途被杀现象编译到一半某个 vtk 模块的 cl.exe 进程被系统强制结束重新编译又从头开始。整体耗时动辄一两个小时机器风扇狂转。原因VTK_BUILD_TESTING在配置时是ONVTK 自带的测试、示例、第三方 demo 全被编了。另一个因素是 MSBuild 默认并行度过高Debug 和 Release 同时构建时内存峰值非常高。网上搜“grpc 在 windows 下 visual studio 编译”这类问题时踩的坑也是同一类VS 下并行编译的资源峰值远超预期。解决配置阶段把VTK_BUILD_TESTINGOFFVTK_BUILD_EXAMPLESOFF也顺手关掉。编译时一次只编一个配置在 VS 的选项里把最大并行项目数改成 4。编完后只保留vtkCommon*、vtkRendering*、vtkInteraction*、vtkGUISupportQt*等必要模块的产物把vtkTesting*之类全部清掉。另外注意链接阶段偶尔出现的cannot find -lpublic这类问题在 VS 下通常不会出现它更像 MinGW 链路的报错VS 下缺依赖时更多表现为LNK2019 无法解析的外部符号看到这个先检查是不是某些模块被关掉了但代码还在用。6. 用自编译 SDK 回接工程最小验证程序与 DLL 体检6.1 写进 CMakeLists.txtfind_package 与 VTK:: 目标链接SDK 能不能用最终要在一个新工程里验证。新建一个文件夹写一个最精简的 CMakeListscmake_minimum_required(VERSION 3.16) project(vtk9_sdktest) set(CMAKE_PREFIX_PATH D:/VTKSDK/vtk-9.3.1/release C:/Qt/5.15.2/msvc2019_64 ) find_package(VTK 9.3.1 CONFIG REQUIRED) find_package(Qt5 5.15 REQUIRED COMPONENTS Widgets) add_executable(TestVTK main.cpp) target_link_libraries(TestVTK PRIVATE VTK::GUISupportQt VTK::RenderingOpenGL2 VTK::RenderingContextOpenGL2 )find_package(VTK 9.3.1 CONFIG REQUIRED)读的是 SDK 里lib/cmake/vtk-9.3下的配置文件VTK::GUISupportQt这种 target 链接方式会在编译期自动带上vtkGUISupportQt-9.3.lib并且把include/vtk-9.3头文件路径加到工程里。老教程里常见的是直接把VTK_LIBRARIES变量填进 target_link_libraries9.3 下仍能工作但 target 方式更清晰少了漏模块的问题。6.2 main.cpp一个画出圆柱体的最小 Qt 程序#include QApplication #include QMainWindow #include QVTKOpenGLNativeWidget.h #include vtkActor.h #include vtkAutoInit.h #include vtkCylinderSource.h #include vtkGenericOpenGLRenderWindow.h #include vtkPolyDataMapper.h #include vtkRenderer.h #include vtkSmartPointer.h VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle); int main(int argc, char** argv) { QApplication app(argc, argv); auto renderer vtkSmartPointervtkRenderer::New(); auto cylinder vtkSmartPointervtkCylinderSource::New(); auto mapper vtkSmartPointervtkPolyDataMapper::New(); auto actor vtkSmartPointervtkActor::New(); mapper-SetInputConnection(cylinder-GetOutputPort()); actor-SetMapper(mapper); renderer-AddActor(actor); renderer-ResetCamera(); auto renderWindow vtkSmartPointervtkGenericOpenGLRenderWindow::New(); renderWindow-AddRenderer(renderer); QVTKOpenGLNativeWidget widget; widget.setRenderWindow(renderWindow); widget.resize(800, 600); QMainWindow window; window.setCentralWidget(widget); window.resize(800, 600); window.show(); return app.exec(); }widget.setRenderWindow(renderWindow)是 9.x 之后的核心接口它接受一个vtkRenderWindow指针把 VTK 的渲染结果绘制到 QOpenGLWidget 的颜色缓冲上。VTK_MODULE_INIT两个宏负责注册 OpenGL2 渲染后端和交互样式没有它们运行时可能出现“no override found”的警告鼠标旋转交互也失效。编译运行后看到窗口里出现一个可旋转的圆柱体说明 SDK 的头文件、库文件、DLL 依赖三条链路全部打通。6.3 验证 DLL 依赖是否全部来自同一套 SDK程序能跑只是第一步还得确认加载的 DLL 没有混用。用 dumpbin 检查 exedumpbin /dependents D:/vtk9_sdktest/build/Release/TestVTK.exe看输出里的vtkCommonCore-9.3.dll是否来自D:/VTKSDK/vtk-9.3.1/release/binQt5Core.dll是否来自C:/Qt/5.15.2/msvc2019_64/bin。Debug 版则对应检查带d后缀的 DLL 是否齐全。这一步能提前发现路径串位、配置混用的问题比等到客户报错再排查要省事得多。这套 SDK 目录约定和验证流程我前后带过三个团队落地最大的教训是不要相信“编一次通了一切都好了”的直觉DLL 部署是 Windows 三维应用里另一个黑匣子。每次换机器、换 Qt 版本、换 VS 版本后老老实实跑一遍 dumpbin几分钟就能避免上线后搜问题搜到半夜。希望帮到你。本文还有配套的精品资源点击获取
返回列表