文章目录

  • Pangolin在windows编译记录
    • 1. 首先看结果
    • 2. 源码下载
      • 2.1. 链接器错误
      • 2.2. 运行库版本不对应
      • 2.3. 工程文件名字修改
    • 3. Cmake编译
    • 4. 带Eigen的编译
    • 5. 开放其他接口

Pangolin在windows编译记录

本来是在ubuntu下使用的轻量级可视化软件,这里为了使用ciltrano需要用Pangolin用于可视化,因此尝试在Window10,vs2017下编译Pangolin。

1. 首先看结果

2. 源码下载

这里使用经过修改后的源代码:github,因为原始的代码编译为库文件时没有导出函数的,因此直接编译会出现一点小问题。所以需要对源码进行简单的修改。

2.1. 链接器错误

问题:LNK2019 无法解析的外部符号 “public: __cdecl pangolin:: Packet::~Packet(void)” (??1Packet@pangolin@@QEAA@XZ),该符号在函数 main 中被引用 VideoJsonPrint D:\Software\Pangolin\build\tools\VideoJson\main-print.obj
问题解析:根据错误提示可以看出是在VideoJson项目中的main函数中的Packet找不到对应的实现过程。这个问题出现的原因可以归结为:

  • 对应类的实现没有找到,即缺少了lib文件;
  • 虽然添加了正确的lib文件,但是该类没有导出,因此无法外部访问。

图 2.1 附加依赖项

解决方案:此时需要看当前工程是不是正确添加了链接中的附加依赖项。经过检查如图 2.1所示,发现已经添加。然后通过F12定位到源码中Packet类的定义文件中,并结合其他Pangolin的定义文件,发现缺少PANGOLIN_EXPORT这个宏定义,导致在编译tool工具中的VideoJson工程项目时可以找到Packet(通过头文件),但是由于没有导出VideoJson找不到对应的实现过程。
PocketStream遇到的问题及解决方案同上。

图 2.2 修改文件

图 2.3 其他Pangolin导出类时的定义

图 2.4 修改后的文件定义

2.2. 运行库版本不对应

问题:LNK2005 “public: int __cdecl std::basic_streambuf<char,struct std::char_traits >::sputc(char)” (?sputc@?basicstreambuf@DU?basic_streambuf@DU?basics​treambuf@DU?char_traits @D@std@@@std@@QEAAHD@Z) 已经在 pangolin.lib(pangolin.dll) 中定义VideoJsonPrint D:\Software\Pangolin\build\tools\VideoJson\libcpmtd.lib(locale.obj) 1。
问题解析:因为将Pangolin编译为动态库版本,而工程中的运行库还是多线程调试的MT/MTd版本,和windows系统中的libcpmtd.lib版本不一致。
解决方案:因此需要将工程中都换成MD版本的,即动态库版本的,Debug对应MDd,Release对应MD版本

图 2.5 运行库版本不一致

2.3. 工程文件名字修改

发现Pangolin编译的Debug和Release版本的动态库文件名字都是一样的,这个在后续使用时很容易搞错而导致不可预料的运行错误,因此将工程中全部的Debug版本的库(.lib.dll.pdb)文件全都改成了${ProjectName}_d的形式,例如pangolin_d.dll,这里还需要注意的是,在编译时lib,dll,pdb的文件需要单独改,应该在cmakelist中可以批量改,但是不想那么麻烦了。就手动修改先。

图 2.6 lib修改

3. Cmake编译

批生成时,直接install会因为修改了库的名字而在安装时找不到对应的可执行文件,因此需要找到对应的cmake_install.cmake 文件手动修改。如图 3.1所示。

图 3.1 修改lib名字之后install出错

图 3.2 Cmake编译Pangolin

图 3.3 样例运行

4. 带Eigen的编译

其实在cmake构建工程的时候已经手动选择了Eigen的路径,但是在Pangolin中还是没有识别到正确的Eigen的路径,导致在编译好的Pangolin中没有Eigen也无法使用ToEigen这个函数,因此需要在编译Pangolin时将Eigen添加进去。重新开始编译。在预处理器定义中添加HAVE_EIGEN这个宏定义。

图 4.1 附加Eigen的编译

5. 开放其他接口

在编译cilantro的时候遇到界面字体错误,于是修改了默认字体的导出方式,对原始Pangolin不会有影响,而是cilantro可以编译通过了。

图 5.1 导出字体定义

图 5.2 导出与显示相关的接口函数

Pangolin在Windows编译记录相关推荐

  1. Cef mysql.exe_CEF3.2623使用记录:windows编译

    CEF3.2623使用记录:windows编译 1:cef3.2623下载地址 2623是cef3最后一个支持xp系统的版本,且可以支持html的audio标签,可以用作对html音频的处理下载地址为 ...

  2. windows编译g20问题解决记录

    windows编译g20问题解决记录 error C3861: 'vasprintf': identifier not found 参考链接 here

  3. 构建VisualStudio2019+OpenCV4.3的C++ windows编译环境

    一.引言 最近在读源代码研究CLAHE的算法,但好久没学习C++了,发现部分代码难以理解,因此最后下决心装一个C++编译器.下载OpenCV源码,这样碰到疑难问题就可以实际测试了.构建过程遇到了些问题 ...

  4. opencv4.5.5+qt5.15.2+vtk9.1+mingw81_64编译记录

    目录 一  VTK编译 二  无opencv_contrib编译记录 三  有opencv_contrib编译记录 四  参考链接 mingw编译器针对很多仓库代码没有编译错误,适配mingw是个好选 ...

  5. Windows编译Tensorflow2.2.0 C++ dll (CPU bazel)

    Windows编译Tensorflow2.2.0 C++ dll (CPU bazel) 0.建议预先下载的几个包 1.VS2019, anaconda, bazel, msys2 下载.安装.路径设 ...

  6. ORB-SLAM2 编译记录

    ORB-SLAM2编译记录 由于之前已经编译过ORB-SLAM3,大部分库都已经配置好了,这次主要只了处理两个错误 1. error: usleep is not declared in this s ...

  7. OGRE 2.1 Windows 编译

    版权所有,转载请注明链接 OGRE 2.1 Windows 编译 环境: Windows 7 64Bit Visual Studio 2012 OGRE 2.1 CMake 2.8.12.1 OGRE ...

  8. DCNv2 windows编译2021

    2019年曾经写过一篇DCNv2 windows编译的博客 https://blog.csdn.net/jacke121/article/details/91355170 当时vs2015是编译成功的 ...

  9. QT多插件通信框架CTK编译记录

    目录 一  编译结果 二   部署配置 三  Log4Qt编译配置 四  参考链接 五  拓展资料 一  编译结果 参考链接有源码. 二   部署配置 ##CTK.pri# CTK install d ...

最新文章

  1. redis入门(03)redis的配置
  2. 从零搭建一套结构光3D重建系统[理论+源码+实践]
  3. java关闭ie提示_java 关闭IE
  4. Ubuntu 开机自动执行脚本
  5. 效率极低人群的七大习惯你占了几项?
  6. 一行命令让ElasticSearch支持中文分词搜索
  7. vnc连接linux颜色灰色,VNC 灰色的屏幕解决方法
  8. 休息是为了更好的出发
  9. java直接引用_Java虚拟机 - 符号引用和直接引用理解
  10. JQuery input file 上传图片
  11. gmt绘制江苏省高程异常图
  12. idea引入oracle依赖包,MAC下intellij idea导入ojdbc6.jar
  13. 测试技术-易用性测试
  14. 宏电7710与组态王通信配置
  15. java全栈(java全栈开发工程师)
  16. iOS 多线程dispatch_async dispatch_sync(GCD)详尽总结
  17. vuex mutaton与actions的区别
  18. 入门版Linux上恢复误删除的文件
  19. js实现在微信中下载apk
  20. labview:一个采集数据的小程序

热门文章

  1. 业务为什么投诉了数据团队
  2. 新增人工智能专硕!211江南大学
  3. 十五、Jdbc操作数据库
  4. 一个人的奥林匹克 一个人的公司
  5. 分享一套开源的springboot制造执行MES系统源码,带本地部署搭建教程+运行文档
  6. Widget星球—widget web 网页Widget 最好的widget widget开发
  7. 计算机双网口怎么共享网络,win7电脑怎么共享上网 两台电脑共享上网操作方法...
  8. 2022企业邮箱自动回复怎么设置?邮箱怎么设置使用更便捷
  9. 基于51单片机电子秤(程序+仿真+原理图)
  10. 前端 “一键换肤“ 的 N 种方案