Windows10 + VS2017 + Pangolin + 依赖库 配置指南

配置背景

  由于最近需要配置高翔博士 ORBSLAM2 的稠密点云版本,而其中用到的 PCL 库默认是 MD 的运行库,与我之前配置好的其他运行库不同。因此,需要额外再配置一下 Pangolin 库的 MD 版本。

  Pangolin 目前的最新版本是 0.6,但是该版本基于 C++17 标准编译,与 ORBSLAM2 的源代码不兼容,因此我们采用 0.5 版本进行配置。

  0.5 版本的下载链接如右:Pangolin V0.5(https://github.com/stevenlovegrove/Pangolin/releases)

配置环境

  Windows 10
  VS2017
  Pangolin 0.5
  Cmake 3.18.4
  配置目标:Pangolin 0.5 x64 Release /MD

构建

  在库文件夹的根目录下新建 build 文件夹,利用 cmake-gui 进行构建,如下图所示。注意我这里选取的是 x64 模式。

在这里插入图片描述
  进行 Configure,如下图所示。注意这里面的glew、libjpeg、libpng 以及 zlib 几个依赖库不用管,后面在编译的时候,VS2017 会自己从对应网址 git clone 下来。不过由于这四个依赖库在 VS2017 实在 git 太慢,因此我们计划将其分别自己配置一下。

在这里插入图片描述
  然后直接 Generate 即可完成构建。

编译

  首先单独配置以下四个依赖库:

libjpeg 配置

  通过查看对应工程下的 CMakeLists.txt 文件,得到该库的下载位置如右:https://github.com/LuaDist/libjpeg.git

  git clone 到本地后,还是基于 Cmake-GUI 按照上述相似的方法进行配置。只是注意将配置选项中的BUILD_STATIC要勾选,因为我们这里需要的是静态库。如下图所示:

在这里插入图片描述
  然后 Generate,构建对应的 VS2017 解决方案。注意在编译的时候,采用 Release X64 模式,同时要将 jpeg 项目属性中的C/C++代码生成中的运行库改为多线程DLL(/MD)。不过由于我的项目默认就是 MD 模式,所以就不改了。项目属性常规中的配置类型是.lib静态库。

  编译起来一路绿灯,最终在 build 目录下的 Release 目录中生成了我们需要的 jpeg.lib。同时,我们收集 build 中所有的头文件和源文件,创建 lib 和 include 两个文件夹分别存放生成的库文件和收集的头文件、源文件,以备后用。

glew 配置

  该库的下载地址如右:https://github.com/Perlmint/glew-cmake.git

  glew 库下载到本地的根目录中已存在 build 文件夹,看来应该是已经提前构建完成。由于我们是 VS2017 的 IDE,因此进入到 vc14 文件夹下,打开 glew.sln 解决方案。

  在打开解决方案时,显示该项目使用的平台工具集比较早,这里我直接确定。如下图所示。

在这里插入图片描述
  进入解决方案后,依然是 Release x64 模式,并且将 glew_static 项目的属性中的运行库更改为 /MD。然后只右键生成 glew_static 项目即可。

  最终生成的是 glew32s.lib 库文件。然后依旧新建 include 和 lib 文件夹将相关文件保存好,以待后用。注意,库文件自动生成在了根目录的 lib 文件夹下,不要再到 build 文件夹中去找了。同时 include 文件夹也直接复制根目录下的同名文件夹即可。

zlib 配置

  该库的下载地址如右:https://github.com/madler/zlib.git

  直接参照上述过程,x64构建生成即可。截图如下:

在这里插入图片描述
  之后还是 Release x64 /MD 模式,注意只生成 zlibstatic 项目,其他就不赘述了。最终还是参照项目中的文件列表,收集所有头文件和源文件,创建 include 和 lib 目录存储。除 zconf.h 在 build 目录下外,其余文件都在根目录下,直接复制即可。

libpng 配置

  该库的下载地址如右:https://github.com/glennrp/libpng.git

  在构建的时候,会报错没有找到 zlib 库。不过由于在此之间已经配置过,因此参照错误信息,直接勾选PNG_BUILD_ZLIB,暂时忽略该错误。等到编译的时候,再链接 zlib 库即可。

  生成解决方案后,于 png_static 项目属性中,在VC++目录/包含目录中添加之前配置 zlib 库中 include 文件夹的目录。在VC++目录/库目录中添加之前配置 zlib 库中 lib 文件夹的目录。注意项目仍然是 Release x64 MD 的模式。

  最终生成 libpng16_static.lib 库文件。依旧将相关文件分别放到 include 和 lib 文件夹中保存起来。

在 VS2017 中配置上述第三方库

  我们将上述生成的四个第三方库的 include 和 lib 文件夹放到对应库文件名称的目录下,暂时存放到 Pangolin-0.5 根目录的 external 文件夹下备用。如图所示:

在这里插入图片描述
  此后,我们打开 Pangolin 解决方案,同样在 Release x64 模式下,将 Pangolin 项目的运行库设置为 /MD 模式。我们在属性管理器 Pangolin 项目 Release|x64 文件夹中对上述四个库分别新建属性表,方便管理。诸属性表的配置如下:

glew.props

VC++目录/包含目录:…\external\glew\include

VC++目录/库目录:…\external\glew\lib

链接器/输入/附加依赖项:glew32s.lib

libjpeg.props

VC++目录/包含目录:…\external\libjpeg\include

VC++目录/库目录:…\external\libjpeg\lib

链接器/输入/附加依赖项:jpeg.lib

zlib.props

VC++目录/包含目录:…\external\zlib\include

VC++目录/库目录:…\external\zlib\lib

链接器/输入/附加依赖项:zlibstatic.lib

libpng.props

VC++目录/包含目录:…\external\libpng\include

VC++目录/库目录:…\external\libpng\lib

链接器/输入/附加依赖项:libpng16_static.lib

继续编译 Pangolin

  上述属性表添加到 Pangolin 项目中后,为保险起见,我们先将四个第三方库的项目(__glew__libjpeg__libpng__zlib)卸载,然后单独生成 Pangolin 项目。

  在编译时,报错找不到 glew.h、png.h 以及 jpeglib.h,但是我反复检查平台类型之类的配置都没有发现问题,于是就直接将其改为绝对路径,最终完成编译,成功生成 pangolin.lib

使用

Pangolin 库的导入

  然后新建 Pangolin 文件夹,其下新建 include 和 lib 文件夹。生成的 pangolin.lib 放到 lib 文件夹下,include 文件夹则直接复制 Pangolin 根目录的 include 文件夹即可。这里要注意,include 文件夹中还要在对应位置包含 Pangolin-0.5\build\src\include\pangolin 目录下的 config.h 以及 pangolin_export.h 两个头文件,上述两个头文件是 ORBSLAM2 运行所需要的的。

  注意,在具体的使用中,Pangolin 库要和其四个依赖库搭配使用,换言之,ORBSLAM2中,需要同时添加上述五个库的包含目录、库目录以及依赖项。可以将上述配置都集合至一个属性表即可。

OpenGL 函数成为无法解析的外部符号问题

  在将 Pangolin 及其 四个依赖库配置入 ORBSLAM2 中后,发现 Pangolin.lib 和其他一些库文件中报错很多无法解析的符号,实际上均是 OpenGL 的函数。

  反复检查平台类型以及运行库的配置参数,没有发现问题,正当愁闷之际,通过查阅资料突然发现了前辈经验如斯:https://blog.csdn.net/qq_35294564/article/details/85062553

  这位前辈也是使用 glew32s.lib 静态库报出无法解析外部符号的错误,通过下面另一位前辈的评论,得知找不到的各种 OpenGL 函数其实都在 opengl32.lib 中。通过添加该依赖项,上述问题解决。

资源分享

  为方便大家,我在这里分别提供我这次配置完成的 Release x64 MD 模式下的 Pangolin 及其四大依赖库,以及我此前的 Release x64 MT 模式的 Pangolin 库及其依赖库。大家可以按需取用:

链接:https://pan.baidu.com/s/1pQ3r3Hiuvbz-QuwbEJMc2g
提取码:7v28

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值