前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >系列文章(一)|VS2013-Qt5.5.1-动态编译-VTK7.0.0

系列文章(一)|VS2013-Qt5.5.1-动态编译-VTK7.0.0

作者头像
点云PCL博主
发布2019-07-30 16:07:07
2.1K0
发布2019-07-30 16:07:07
举报
文章被收录于专栏:点云PCL

这是系列文章的第1/7篇

1. VS2013-Qt5.5.1-动态编译-VTK7.0.0

2.VS2013-MPI v7-静态编译-Boost1.6.1

3.VS2013-编译-Qhull2015.2

4.VS2013-编译-FLANN1.8.4

5.VS2013-编译-Eigen3.2.8

6.OpenNI2.2.0.33下载和安装

7. VS2013-Qt5.5.1-VTK7.0.0-Boost1.6.1-Qhull2015.2-FLANN1.8.4-Eigen3.2.8-OpenNI2.2.0.33-动态编译-PCL1.8.0

此次编译VTK7.0.0,采用VS2013,在X64下编译debug和release两个版本,所依赖的Qt版本是5.5.1(msvc2013_64).

01

前期准备·

一、下载VTK

1.从VTK官网下载源码包(https://www.vtk.org/download/),本文下载的是VTK-7.0.0.zip.

两个压缩文件内容应该是一样的,只不过zip是全平台通用(windows也能解压),tar.gz是linux下通用的压缩文件格式(windows下安装解压软件后也能解压).

2.解压VTK,本文解压到下列路径:

二、下载CMake

1.从CMake官网下载CMake(https://cmake.org/download/),本文下载的是cmake-3.5.2-win32-x86.zip.

2.解压CMake,本文解压到下列路径:

三、下载Qt

从Qt官网下载并安装Qt5.5.1 for vs2013(https://www.qt.io/download), Online Installer或者Offline Installer都可以.它们俩是对Qt的完全安装(包括源码),如果只需要源代码,该页面也提供了下载,自行寻找.

本文安装到下列路径:

注意: 如果电脑中安装了多个版本的Qt,最好只把需要依赖的Qt版本加入环境变量.否则CMake会自动搜索,并自动设置目录,如果目录不是期望的,手动改很烦.

本文把Qt加入了环境变量,即path = D:\Qt\5.5.1\5.5\msvc2013_64\bin;

总之,CMake会自动在电脑中搜索并设置很多东西,如果你想引导CMake的自动搜索,最好的办法就是添加环境变量.还有一种方法是CMake界面,在执行Configure前,手动Add Entry.

02

编译VTK

Setp1

打开cmake-gui.exe,它位于cmake-3.5.2-win32-x86\bin目录下.

Step2

1.设置源码路径(就是包含"CMakeLists.txt"的路径):

你源码解压至哪里,就设置哪里.如图:

2.设置构建路径:

CMake会在该路径下,生成solution(针对VS),打开sln就可以编译出结果,所有编译结果都在该目录下.如图:

Step3

勾选CMake界面上的Grouped和Advanced, Grouped是对配置分组,Advanced是显示高级配置.这两个复选框,什么时候点击都可以.

Step4

点击Configure.

CMake要求选择编译器,根据实际需求选择即可,本文选择如下,然后CMake开始生成配置.

Step5

等待CMake把配置生成完毕后,就需要对CMake自动生成的配置进行修改.所有红色显示的配置,都是需要用户确认的配置或者有问题的配置,在默认配置上进行如下修改:

1.BUILD_SHARED_LIBS 选中,构建动态库版本,即既有lib,又有dll.

2.VTK_Group_Qt 选中,使用Qt.

3.CMAKE_INSTALL_PREFIX 修改为D:/VTK/ 7.0.0/msvc2013_64

这个目录可以自行指定,当VTK编译完成后,安装时,会将VTK安装到指定的目录,强烈建议修改此目录.

4.

INSTALL_BIN_DIR 修改为D:/VTK/7.0.0/msvc2013_64/bin

INSTALL_INC_DIR 修改为D:/VTK/7.0.0/msvc2013_64/include

INSTALL_LIB_DIR 修改为D:/VTK/7.0.0/msvc2013_64/lib

INSTALL_MAN_DIR 修改为D:/VTK/7.0.0/msvc2013_64/share/man

INSTALL_PKGCONFIG_DIR 修改为D:/VTK/7.0.0/msvc2013_64/share/pkgconfig

上面配置修改完后,点击Configure,会报错,点ok即可.

Step6

VTK_QT_VERSION 修改为5

修改完之后, 点击Configure.

Step7

下面7项,如果环境变量正确,应该自动填好了,不需要修改.

QT_QMAKE_EXECUTABLE 修改为D:/Qt/5.5.1/5.5/msvc2013_64/bin/qmake.exe

Qt5_DIR 修改为D:/Qt/5.5.1/5.5/msvc2013_64/lib/CMake/Qt5

Qt5Core_DIR 修改为D:/Qt/5.5.1/5.5/msvc2013_64/lib/CMake/Qt5Core

Qt5Gui_DIR 修改为D:/Qt/5.5.1/5.5/msvc2013_64/lib/CMake/Qt5Gui

Qt5Sql_DIR 修改为D:/Qt/5.5.1/5.5/msvc2013_64/lib/CMake/Qt5Sql

Qt5UiPlugin_DIR 修改为D:/Qt/5.5.1/5.5/msvc2013_64/lib/CMake/Qt5UiPlu

gin

Qt5Widgets_DIR 修改为D:/Qt/5.5.1/5.5/msvc2013_64/lib/CMake/Qt5Widgets

直接点击Configure.

Step8

点击Add Entry

Name:CMAKE_DEBUG_POSTFIX

Type:STRING

Value:d

Description:可以为空

如下图:

这样可以让debug版本编译出二进制文件,带有后缀d.以便和release版本编译出的二进制文件相区分.强烈建议这么做.

添加之后,点击Configure.

Step9

如果还有配置是红色,点击Configure,直到没有配置为红色.

之后点击Generate.

Step10

生成完成之后,CMake就可以关了.找到构建目录下的\GUISupport\Qt\PluginInstall.cmake文件,打开它,把第五行:

SET(VTK_INSTALL_QT_PLUGIN_FILE"QVTKWidgetPlugin.dll")

修改为:

IF(BUILD_TYPE MATCHES Debug)

SET(VTK_INSTALL_QT_PLUGIN_FILE "QVTKWidgetPlugind.dll")

ELSE()

SET(VTK_INSTALL_QT_PLUGIN_FILE "QVTKWidgetPlugin.dll")

ENDIF()

然后保存,并关闭文件.

不修改,debug下install报错,但如果你能理解编译过程,并看懂错误,这个错误其实没什么大不了.

同样是为了区分D版和R版的dll.D版带有后缀d.

Step11

用VS打开构建目录下的VTK.sln解决方案.

等待IDE解析,解析完成后,状态栏会显示就绪.解析过程比较耗时,耐心等待VS解析完成.

当然,可以不用等待解析完成,直接构建.

*如果装有VX等插件,建议打开VTK.sln之前禁用VX插件,否则解析可能会很慢,VS可能卡死.

Step12

确保ALL_BUILD为启动项目(如果没出问题,它应该就是启动项目).

选择ALL_BUILD项目,点击生成

编译过程比较耗时,具体时间,取决于电脑性能(主要是CPU,然后是硬盘).

Step13

Step12生成成功之后,就可以安装VTK了,右击INSTALL项目,选择仅生成INSTALL.然后就开始安装VTK了,安装完成,就可以在之前设置的prefix目录下看到安装之后的VTK.

Step14

如果Step12-13生成的是debug版本,切换成release,重复12-13即可生成并安装release版本.

*建议,要么只安装R版;要么先安装D版,再安装R版.因为后安装的版本,会覆盖同名的文件.

注意

CMake的generate依赖编译器默认设置,对VS2013来说.如果你之前对全局属性表做过设置,建议恢复原状,否则可能出现莫名其妙的错误.禁用语言扩展必须为否.如图:

编译器设置恢复默认,最简单的办法,就是把自定义的属性页全部移除,VS自带属性页全部恢复默认.

VTK安装目录分析

注意:下面说明,在没有编译test时成立,编译了test后dll,lib,pdb数量会多出一些.

[bin]文件夹中,D/R版本各有109个dll和2个exe.

dll一一对应,但内容不一样.

exe同名,但内容不一样.

[lib]文件夹中,D/R版本各有109个动态lib和1个静态lib.

vtksqlite-7.0.lib和vtksqlite-7.0d.lib是静态库,没有dll,也没有为它生成pdb.

lib一一对应,但内容不一样.

[lib]文件夹中,有个CMake文件夹,D/R版本的内容完全一样.

除了VTKTargets-debug.CMake和VTKTargets-release.CMake.

[include]文件夹中,D/R版本的内容完全一样.

CMake文件夹中,D/R版本的内容完全一样.

plugins文件中,D/R版本都有一个designer文件夹,各有一个dll.

dll一一对应,但内容不一样.Qt设计师真正需要的是R版本dll.

share文件中,D/R版本的内容完全一样.

install在复制内容时,如果检测到同名且内容一样的文件,直接跳过,不复制;

检测到同名但内容不一样的文件,覆盖;

未检测到同名文件,复制.

install不会复制pdb文件,如果需要pdb,则只能手动复制.

D版本生成的pdb中,除了那109个dll对应的pdb,还有额外的6个pdb,分别是

lproj.pdb

QVTKWidgetPlugind.pdb

[vtkEncodeString-7.0.pdb]

vtkH5detect.pdb

vtkH5make_libsettings.pdb

[vtkHashSource-7.0.pdb]

其中QVTKWidgetPlugind.pdb对应的是QVTKWidgetPlugind.dll,它是Qt设计师的插件.

另外5个PDB对应的都是exe,其中[]括起来的pdb对应的exe被复制到[bin]目录下了.

所以如果真的需要使用pdb,仅仅复制那109个dll对应的pdb到安装目录的[bin]即可.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 点云PCL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档