Pangolin在Windows编译记录
文章目录
- 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?basicstreambuf@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编译记录相关推荐
- Cef mysql.exe_CEF3.2623使用记录:windows编译
CEF3.2623使用记录:windows编译 1:cef3.2623下载地址 2623是cef3最后一个支持xp系统的版本,且可以支持html的audio标签,可以用作对html音频的处理下载地址为 ...
- windows编译g20问题解决记录
windows编译g20问题解决记录 error C3861: 'vasprintf': identifier not found 参考链接 here
- 构建VisualStudio2019+OpenCV4.3的C++ windows编译环境
一.引言 最近在读源代码研究CLAHE的算法,但好久没学习C++了,发现部分代码难以理解,因此最后下决心装一个C++编译器.下载OpenCV源码,这样碰到疑难问题就可以实际测试了.构建过程遇到了些问题 ...
- opencv4.5.5+qt5.15.2+vtk9.1+mingw81_64编译记录
目录 一 VTK编译 二 无opencv_contrib编译记录 三 有opencv_contrib编译记录 四 参考链接 mingw编译器针对很多仓库代码没有编译错误,适配mingw是个好选 ...
- Windows编译Tensorflow2.2.0 C++ dll (CPU bazel)
Windows编译Tensorflow2.2.0 C++ dll (CPU bazel) 0.建议预先下载的几个包 1.VS2019, anaconda, bazel, msys2 下载.安装.路径设 ...
- ORB-SLAM2 编译记录
ORB-SLAM2编译记录 由于之前已经编译过ORB-SLAM3,大部分库都已经配置好了,这次主要只了处理两个错误 1. error: usleep is not declared in this s ...
- OGRE 2.1 Windows 编译
版权所有,转载请注明链接 OGRE 2.1 Windows 编译 环境: Windows 7 64Bit Visual Studio 2012 OGRE 2.1 CMake 2.8.12.1 OGRE ...
- DCNv2 windows编译2021
2019年曾经写过一篇DCNv2 windows编译的博客 https://blog.csdn.net/jacke121/article/details/91355170 当时vs2015是编译成功的 ...
- QT多插件通信框架CTK编译记录
目录 一 编译结果 二 部署配置 三 Log4Qt编译配置 四 参考链接 五 拓展资料 一 编译结果 参考链接有源码. 二 部署配置 ##CTK.pri# CTK install d ...
最新文章
- redis入门(03)redis的配置
- 从零搭建一套结构光3D重建系统[理论+源码+实践]
- java关闭ie提示_java 关闭IE
- Ubuntu 开机自动执行脚本
- 效率极低人群的七大习惯你占了几项?
- 一行命令让ElasticSearch支持中文分词搜索
- vnc连接linux颜色灰色,VNC 灰色的屏幕解决方法
- 休息是为了更好的出发
- java直接引用_Java虚拟机 - 符号引用和直接引用理解
- JQuery input file 上传图片
- gmt绘制江苏省高程异常图
- idea引入oracle依赖包,MAC下intellij idea导入ojdbc6.jar
- 测试技术-易用性测试
- 宏电7710与组态王通信配置
- java全栈(java全栈开发工程师)
- iOS 多线程dispatch_async dispatch_sync(GCD)详尽总结
- vuex mutaton与actions的区别
- 入门版Linux上恢复误删除的文件
- js实现在微信中下载apk
- labview:一个采集数据的小程序
热门文章
- 业务为什么投诉了数据团队
- 新增人工智能专硕!211江南大学
- 十五、Jdbc操作数据库
- 一个人的奥林匹克 一个人的公司
- 分享一套开源的springboot制造执行MES系统源码,带本地部署搭建教程+运行文档
- Widget星球—widget web 网页Widget 最好的widget widget开发
- 计算机双网口怎么共享网络,win7电脑怎么共享上网 两台电脑共享上网操作方法...
- 2022企业邮箱自动回复怎么设置?邮箱怎么设置使用更便捷
- 基于51单片机电子秤(程序+仿真+原理图)
- 前端 “一键换肤“ 的 N 种方案