当前位置: 首页 > wzjs >正文

全国建设建管中心网站国外的智慧城市建设网站

全国建设建管中心网站,国外的智慧城市建设网站,网站建设小工具,Opt/wordpress/VTK - 编译静态库(No DLL) 1. 为什么要编译纯静态库(No DLL)2. 编译过程2.1 前提条件2.2 VTK变量 - 关键配置项 3. 如何在 CMake 中引用 VTK 静态库3.1 最小 CMake 示例3.2 其他注意事项3.3 示例项目结构 1. 为什么要编译纯静态库…

VTK - 编译静态库(No DLL)

  • 1. 为什么要编译纯静态库(No DLL)
  • 2. 编译过程
    • 2.1 前提条件
    • 2.2 VTK变量 - 关键配置项
  • 3. 如何在 CMake 中引用 VTK 静态库
    • 3.1 最小 CMake 示例
    • 3.2 其他注意事项
    • 3.3 示例项目结构

1. 为什么要编译纯静态库(No DLL)

是否需要编译 VTK 为静态库,取决于你的发布需求。

  • 如果你要做一个 独立运行的桌面软件 或者 不想带一堆 DLL,推荐构建为静态库。
  • 如果你追求模块灵活更新、构建速度快,则使用默认的 DLL 构建方式即可。

VTK 默认会构建为动态库(.dll / .so),但在一些特定场景下,使用静态库更有优势

📌 场景🎯 原因与优势
发布独立程序静态库将代码打包进最终 .exe,无需附带 DLL,部署简单
禁止运行时 DLL 依赖避免 “缺失 DLL” 错误(如 `vtkRenderingOpenGL2-9.3.dll 丢失”)
提升安全性和一致性所有依赖编译进一个文件,不怕外部 DLL 被篡改或替换,版本更稳定
用于嵌入式或受限系统某些环境无法使用动态加载,必须链接成单一可执行文件
方便封装为第三方 SDK便于生成单一 .lib.h 提供给他人调用
调试和发布统一控制所有符号和行为在链接阶段决定,避免运行时加载问题

🚫 静态库的劣势

缺点描述
🔺 编译体积大所有依赖都被编进程序,可执行文件变大
🔺 编译时间略长静态链接更耗时,尤其是构建完整 VTK
🔺 内存重复多个程序同时运行,各自都加载全部代码,占内存更高
🔺 不利于模块更新每次改动都需重新编译主程序,不能单独替换模块 DLL

2. 编译过程

2.1 前提条件

  1. VTK 源码包(VTK官网 GitHub 下载)
  2. CMake(推荐 3.20+)
  3. C++ 编译器
    • Windows: Visual Studio (如 VS2019)
    • Linux/macOS: GCC / Clang
  4. 详细参数参考:VTK官方文档

2.2 VTK变量 - 关键配置项

变量含义
BUILD_SHARED_LIBSOFF❗关闭动态库,表示构建静态库
VTK_BUILD_TESTINGOFF关闭测试编译,加快速度
VTK_WRAP_PYTHONOFF不需要 Python 绑定时关闭
CMAKE_INSTALL_PREFIX-安装路径 D:/Libs/VTK_static_install
VTK_GROUP_ENABLE_QtYES使用 QVTKOpenGLNativeWidget 显示 VTK 渲染窗口
Qt5_DIR-C:\QT\5.15.2\msvc2019_64\lib\cmake\Qt5
Qt6_DIR-C:\QT\6.8.3\msvc2022_64\lib\cmake\Qt6
CMAKE_BUILD_TYPE (Linux)Release构建类型(仅限非 MSVC)

BUILD_SHARED_LIBS

设置值结果描述
ON构建 动态库编译输出为 .dll(Windows)或 .so(Linux/macOS),运行时需要这些共享库。
OFF构建 静态库编译输出为 .lib(Windows)或 .a(Linux/macOS),库内容会被链接到最终可执行文件中。

VTK_GROUP_ENABLE_Qt

设置值结果描述
DEFAULT不启用 Qt 模块(默认状态)除非被其他模块依赖,否则不会自动启用任何 Qt 相关模块
YES启用全部 Qt 相关模块快速启用所有 Qt 支持模块,用于开发基于 Qt 的 VTK 应用
NO禁用全部 Qt 相关模块强制不使用任何 Qt 模块,适合纯后台或非图形程序
WANT优先启用 Qt 模块(依赖满足则启用)柔性启用,依赖项满足就启用 Qt 模块,不满足也不会报错
DONT_WANT优先不启用 Qt 模块不主动启用,除非被其他模块显式依赖
REQUIRE强制启用 Qt 模块,否则 CMake 报错如果 Qt 依赖找不到,CMake 会报错,适合确保 Qt 是构建必需的一部分
FORBID强制禁用 Qt 模块即使依赖存在,也绝不允许使用 Qt 模块,用于严格限制依赖环境

启用 Qt 模块后,CMake 会自动开启以下 VTK 模块(具体依赖版本):

模块名称功能说明
VTK::GUISupportQtQt 事件处理支持,基础模块
VTK::GUISupportQtOpenGL用于 QVTKOpenGLNativeWidget 渲染窗口嵌入
VTK::RenderingQtQt 交互渲染器
VTK::ViewsQtQt 视图控件支持(如图表)
VTK::IOExportQt图像导出为 SVG、PDF 等

3. 如何在 CMake 中引用 VTK 静态库

在你完成了 VTK 的静态库编译和安装(如安装到 D:/Libs/VTK_static_install)后,可以通过以下方式在你的项目中使用它:

3.1 最小 CMake 示例

cmake_minimum_required(VERSION 3.15)
project(MyVTKApp)# 设置 VTK 安装路径
set(VTK_DIR "D:/Libs/VTK_static_install/lib/cmake/vtk-9.3") # 注意修改版本号# 查找 VTK 包(会自动导入全部模块)
find_package(VTK REQUIRED)# 启用自动头文件包含路径(VTK 自带变量)
include(${VTK_USE_FILE})add_executable(MyVTKApp main.cpp)# 链接 VTK 所需模块
target_link_libraries(MyVTKApp PRIVATE ${VTK_LIBRARIES})

3.2 其他注意事项

⚠ 注意点说明
静态链接 CRT静态库推荐开启 -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded
使用 QVTKOpenGLNativeWidget需要引入 Qt 的模块头文件和链接 Qt 库
多线程构建推荐设置-DCMAKE_CXX_FLAGS="/MP" 可启用 MSVC 的并行编译提升速度
配合 Qt 静态库Qt 也需静态编译,否则会混合使用 DLL 与静态库导致链接错误
防止运行时 DLL 报错确保依赖项(如 freetype、zlib 等)也为静态版本,否则链接会失败或运行缺 DLL

3.3 示例项目结构

MyVTKApp/
├── CMakeLists.txt
├── main.cpp
└── ...

示例 main.cpp

#include <vtkSmartPointer.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>int main()
{auto renderer = vtkSmartPointer<vtkRenderer>::New();auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetRenderWindow(renderWindow);renderWindow->Render();interactor->Start();return 0;
}
http://www.dtcms.com/wzjs/553302.html

相关文章:

  • 医院网站建设情况说明wordpress 影楼
  • 怎样做一个网站赚钱吗WordPress搭建连不上数据库
  • 选择赣州网站建设苏州手机网站搭建
  • 常州网站制作报价静态动漫网站模板
  • 自己做企业网站用哪个软件微网站开发第三方平台
  • 下单网站搭建wordpress搬家502
  • 番禺网站开发哪家好石家庄建设网站公司哪家好
  • 网页设计模板网站推荐济南网站推广徽hyhyk1
  • 做封面的网站在哪里注册公司流程和费用需要哪些条件
  • 20个优秀的响应式设计html5网站模板软文广告属于什么营销
  • 江门城乡建设局官方网站站群系统软件
  • 采集微信公众号 做网站重庆潼南网站建设价格
  • 全国最新网站备案查询北京搜索引擎推广服务
  • 凡客建站快车做造价在那个网站比较好
  • 靖江做网站哪家好四川广汉市规划和建设局网站
  • dw做网站有哪些用处传统营销渠道有哪些
  • 北京网站排名方案企业网站 php
  • 东莞网站推广定制公司东莞网站建设17
  • 江西网站建设企业邮箱号怎么注册
  • 旅游网站建设经费预算做策划 都上什么网站
  • 网站jquery在线优化p2p万能搜索种子
  • 太原关键词排名优化深圳免费网站排名优化
  • 房地产电子商务的网站建设宾馆网站制作
  • 网站建设管理维护责任书格式无忧网站源码
  • 建设推广网站建网站建设网站
  • 微信电影网站怎么做的网络公司营业范围
  • 电子商务 网站模板做cps的网络文学网站
  • 同城同镇网站建设wordpress 回复某个人
  • 买机票便宜的网站建设做个简单网站大概多少钱
  • 网页设计免费网站推荐微软做网站