学习slam14讲,在wsl里配置Pangolin遇到tiff包链接不上的问题 并解决
打开文件 Pangolin/components/pango_image/CMakeLists.txt这是原来的文件get_filename_component(COMPONENT ${CMAKE_CURRENT_LIST_DIR} NAME) find_package(Eigen3 REQUIRED NO_MODULE) target_compile_definitions(${COMPONENT} PUBLIC HAVE_EIGEN) option(BUILD_PANGOLIN_LIBPNG Build support for libpng image input ON) if(BUILD_PANGOLIN_LIBPNG) find_package(PNG QUIET) if(PNG_FOUND) target_compile_definitions(${COMPONENT} PRIVATE HAVE_PNG) target_include_directories(${COMPONENT} PRIVATE ${PNG_INCLUDE_DIR} ) target_link_libraries(${COMPONENT} PRIVATE ${PNG_LIBRARY} ${ZLIB_LIBRARY}) message(STATUS libpng Found and Enabled) endif() endif() option(BUILD_PANGOLIN_LIBJPEG Build support for libjpeg image input ON) if(BUILD_PANGOLIN_LIBJPEG) find_package(JPEG QUIET) if(JPEG_FOUND) target_compile_definitions(${COMPONENT} PRIVATE HAVE_JPEG) target_include_directories(${COMPONENT} PRIVATE ${JPEG_INCLUDE_DIR} ) target_link_libraries(${COMPONENT} PRIVATE ${JPEG_LIBRARY}) message(STATUS libjpeg Found and Enabled) endif() endif() option(BUILD_PANGOLIN_LIBTIFF Build support for libtiff image input ON) if(BUILD_PANGOLIN_LIBTIFF) find_package(TIFF QUIET) if(TIFF_FOUND) target_compile_definitions(${COMPONENT} PRIVATE HAVE_LIBTIFF) target_link_libraries(${COMPONENT} PRIVATE TIFF::TIFF) message(STATUS libtiff Found and Enabled) endif() endif() option(BUILD_PANGOLIN_LIBOPENEXR Build support for libopenexr image input ON) if(BUILD_PANGOLIN_LIBOPENEXR) find_package(OpenEXR 3 QUIET) if(OpenEXR_FOUND) target_compile_definitions(${COMPONENT} PRIVATE HAVE_OPENEXR) target_link_libraries(${COMPONENT} PRIVATE OpenEXR::OpenEXR) target_compile_options(${COMPONENT} PRIVATE $$OR:$CXX_COMPILER_ID:AppleClang,$CXX_COMPILER_ID:Clang,$CXX_COMPILER_ID:GNU: -Wno-deprecated-register -Wno-deprecated ) # https://github.com/stevenlovegrove/Pangolin/issues/677 set_target_properties(${COMPONENT} PROPERTIES CXX_STANDARD 11) message(STATUS libopenexr Found and Enabled) endif() endif() option(BUILD_PANGOLIN_LZ4 Build support for liblz4 compression ON) if(BUILD_PANGOLIN_LZ4) find_package(Lz4 QUIET) if(Lz4_FOUND) target_compile_definitions(${COMPONENT} PRIVATE HAVE_LZ4) target_include_directories(${COMPONENT} PRIVATE ${Lz4_INCLUDE_DIRS} ) target_link_libraries(${COMPONENT} PRIVATE ${Lz4_LIBRARIES}) message(STATUS liblz4 Found and Enabled) endif() endif() option(BUILD_PANGOLIN_ZSTD Build support for libzstd compression ON) if(BUILD_PANGOLIN_ZSTD) find_package(zstd QUIET) if(zstd_FOUND) target_compile_definitions(${COMPONENT} PRIVATE HAVE_ZSTD) target_include_directories(${COMPONENT} PRIVATE ${zstd_INCLUDE_DIR} ) target_link_libraries(${COMPONENT} PRIVATE ${zstd_LIBRARY}) message(STATUS libzstd Found and Enabled) endif() endif() option(BUILD_PANGOLIN_LIBRAW Build support for raw images (libraw) ON) if(BUILD_PANGOLIN_LIBRAW) find_package(libraw QUIET) if(libraw_FOUND) target_compile_definitions(${COMPONENT} PRIVATE HAVE_LIBRAW) target_include_directories(${COMPONENT} PRIVATE ${libraw_INCLUDE_DIR} ) target_link_libraries(${COMPONENT} PRIVATE ${libraw_LIBRARIES}) message(STATUS libraw Found and Enabled) endif() endif() target_sources( ${COMPONENT} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/src/pixel_format.cpp ${CMAKE_CURRENT_LIST_DIR}/src/image_io.cpp ${CMAKE_CURRENT_LIST_DIR}/src/image_io_exr.cpp ${CMAKE_CURRENT_LIST_DIR}/src/image_io_jpg.cpp ${CMAKE_CURRENT_LIST_DIR}/src/image_io_lz4.cpp ${CMAKE_CURRENT_LIST_DIR}/src/image_io_packed12bit.cpp ${CMAKE_CURRENT_LIST_DIR}/src/image_io_pango.cpp ${CMAKE_CURRENT_LIST_DIR}/src/image_io_png.cpp ${CMAKE_CURRENT_LIST_DIR}/src/image_io_ppm.cpp ${CMAKE_CURRENT_LIST_DIR}/src/image_io_raw.cpp ${CMAKE_CURRENT_LIST_DIR}/src/image_io_tga.cpp ${CMAKE_CURRENT_LIST_DIR}/src/image_io_bmp.cpp ${CMAKE_CURRENT_LIST_DIR}/src/image_io_zstd.cpp ${CMAKE_CURRENT_LIST_DIR}/src/image_io_libraw.cpp ${CMAKE_CURRENT_LIST_DIR}/src/image_io_tiff.cpp ) set_target_properties( ${COMPONENT} PROPERTIES VERSION ${PANGOLIN_VERSION} SOVERSION ${PANGOLIN_VERSION_MAJOR} ) target_link_libraries(${COMPONENT} PUBLIC pango_core Eigen3::Eigen) target_include_directories(${COMPONENT} PUBLIC $BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include $INSTALL_INTERFACE:include ) install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/include DESTINATION ${CMAKE_INSTALL_PREFIX} )因为这个文件专门负责pango_image组件的构建pango_image是一个处理图像加载/保存的库它需要 TIFF、JPEG、PNG 等库来支持各种格式。当这些库没有正确链接时就会报 undefined reference。 所以我门只需要强制链接tiff就可以 下面是修改后的代码段target_link_libraries(${COMPONENT} PUBLIC pango_core Eigen3::Eigen tiff)然后再再终端运行rm -rf build mkdir build cd build cmake .. make -j$(nproc)

相关新闻

如何在qBittorrent中一键安装20+种子搜索引擎:终极免费搜索插件指南

如何在qBittorrent中一键安装20+种子搜索引擎:终极免费搜索插件指南

如何在qBittorrent中一键安装20种子搜索引擎:终极免费搜索插件指南 【免费下载链接】search-plugins Search plugins for qBittorrent search feature 项目地址: https://gitcode.com/gh_mirrors/se/search-plugins 还在为下载资源而烦恼吗?每次找…

2026/7/20 11:35:37阅读更多 →
Resurrectio扩展开发指南:自定义事件录制与渲染器

Resurrectio扩展开发指南:自定义事件录制与渲染器

Resurrectio扩展开发指南:自定义事件录制与渲染器 【免费下载链接】resurrectio CasperJS test recorder Chrome extension 项目地址: https://gitcode.com/gh_mirrors/re/resurrectio Resurrectio是一款功能强大的Chrome扩展程序,专门用于录制浏…

2026/7/20 11:33:37阅读更多 →
06-CLI命令参考

06-CLI命令参考

OpenCode 操作指导书(六):CLI 命令参考 适用版本:OpenCode v1.18.3 本篇目标:掌握 OpenCode 全部命令行接口,便于脚本化、自动化与无界面(headless)使用。 1. 启动 TUI opencode …

2026/7/20 11:33:37阅读更多 →
81天HTML学习实战:从零基础到网页开发

81天HTML学习实战:从零基础到网页开发

1. HTML学习日记:从零基础到实战应用作为一名前端开发者,我坚持记录学习日记已经81天了。这81天的HTML学习历程让我深刻体会到,掌握好这门基础语言对Web开发有多么重要。HTML(超文本标记语言)是构建网页的基石&#xf…

2026/7/21 5:26:40阅读更多 →
Claude高效对话4大技巧:从新手到专家的实战指南

Claude高效对话4大技巧:从新手到专家的实战指南

1. Claude基础使用避坑指南:告别无效对话的4个实战技巧作为一款新兴的智能对话工具,Claude正在被越来越多的用户所关注。但很多新手在使用过程中常常陷入"无效对话"的困境——明明问了问题,得到的回答却总是差强人意。经过三个月的…

2026/7/21 5:26:40阅读更多 →
HTML第二次作业实践指南:从基础标签到表单实现

HTML第二次作业实践指南:从基础标签到表单实现

1. 作业背景与目标解析"第二次作业"这个标题看似简单,实际上包含了丰富的教学内涵。在编程入门课程中,第二次作业通常标志着学生从理论学习转向实践应用的转折点。根据MDN Web Docs的权威定义,HTML作为构成Web世界的基石语言&#…

2026/7/21 5:26:40阅读更多 →
RecyclerView 缓存机制

RecyclerView 缓存机制

RecyclerView 的缓存机制是其高性能的核心。它通过四级缓存来高效地复用ViewHolder,从而 减少findViewById 的开销 以及 inflate 的次数,实现流畅的滑动体验。 RecyclerView的四级缓存 按照“缓存是什么 -> 存在哪里 -> 特点是什么”的逻辑来阐述&…

2026/7/21 5:26:40阅读更多 →
JavaScript模块化开发与跨文件函数调用指南

JavaScript模块化开发与跨文件函数调用指南

1. JavaScript文件间函数调用的核心原理在现代前端开发中,将代码拆分到不同JS文件中是常见的模块化实践。理解文件间的函数调用机制,是构建可维护Web应用的基础技能。1.1 作用域与函数可见性JavaScript的函数作用域遵循以下规则:全局作用域中…

2026/7/21 5:26:40阅读更多 →
C++ STL map底层原理与核心操作详解:从红黑树到性能优化

C++ STL map底层原理与核心操作详解:从红黑树到性能优化

1. 项目概述:为什么你需要深入理解STL map?如果你正在学习C,尤其是从C语言过渡过来,或者正在准备面试,那么“STL容器”绝对是你绕不开的核心话题。而在众多容器中,std::map以其独特的“键值对”存储方式和高…

2026/7/21 5:24:40阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 0:51:49阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 0:51:49阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 0:51:49阅读更多 →
Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

📌教程适配:OpenClaw v2.7.9 | 兼容 Windows10/11、macOS 双系统 📖前言 当下各类本地 AI 工具层出不穷,多数产品仅能完成文字问答交互,很难直接操控电脑执行实际操作。OpenClaw,业内常称小龙虾 AI&#…

2026/7/21 0:01:46阅读更多 →
Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

聊《一次Codex项目复盘,问题最后出在流程而不是模型》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做&…

2026/7/21 0:01:46阅读更多 →
手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

大家好,还是我。前几期带大家做了心情日记本和可视化大屏,后台有朋友留言:“能不能教点好玩的?我想做游戏,但一行代码都不会。”行,这期就安排。今天的目标:从零做一个五子棋游戏。 带AI对战、三…

2026/7/21 0:03:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/20 22:51:39阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/20 18:51:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/20 18:51:18阅读更多 →