【问题标题】:Using vcpkg to install RTABMap with VSCode as editor使用 vcpkg 以 VSCode 作为编辑器安装 RTABMap
【发布时间】:2023-02-02 00:53:48
【问题描述】:

我想使用 vcpkg 安装 RTABMap,然后使用 VSCode 作为编辑器将 RTABMap 包含到我的 C++ 项目中。我使用 vcpkg install rtabmap:x64-windows 按照他们的 wiki 上的描述安装了 RTABMap(我也尝试了 x86 三元组),然后想在我的项目中使用它。首先,我根据他们存储库中的 example 编写了以下 cmake 文件:

cmake_minimum_required(VERSION 3.5)
project(RTABMap_Test VERSION 0.1.0)
 
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}")
find_package(RTABMap REQUIRED)
find_package(OpenCV REQUIRED)

set(INCLUDE_DIRS
    ${RTABMap_INCLUDE_DIRS}
    ${OpenCV_INCLUDE_DIRS}
)
set(LIBRARIES
    ${RTABMap_LIBRARIES}
    ${OpenCV_LIBRARIES} 
)

include_directories(${INCLUDE_DIRS})
add_executable(RTABMap_Test main.cpp)
target_link_libraries(RTABMap_Test ${LIBRARIES})

和以下 main.cpp 文件:

#include <rtabmap/core/Rtabmap.h>

int main(void) {
  return 0;
}

VSCode中的cmake设置如下:

 "cmake.configureSettings": {
    "CMAKE_TOOLCHAIN_FILE": "G:/.vcpkg/scripts/buildsystems/vcpkg.cmake",
    "VCPKG_TARGET_TRIPLET": "x64-windows"
  }

但是,当我从 VSCode 运行 CMake: Build 时,cmake 失败并显示以下消息:

-- 构建于:Visual Studio 17 2022 -- 选择 Windows SDK 版本 10.0.19041.0 以面向 Windows 10.0.19044。 -- C 编译器标识为 MSVC 19.32.31332.0 -- CXX编译器标识为MSVC 19.32.31332.0 -- 检测 C 编译器 ABI 信息 -- 检测 C 编译器 ABI 信息 - 完成 -- 检查工作的 C 编译器:C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.32.31326/bin/Hostx64/x64/cl.exe - 已跳过 -- 检测 C 编译特性 -- 检测 C 编译特性 - 完成 -- 检测 CXX 编译器 ABI 信息 -- 检测 CXX 编译器 ABI 信息 - 完成 -- 检查工作的 CXX 编译器:C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.32.31326/bin/Hostx64/x64/cl.exe - 跳过 -- 检测 CXX 编译特性 -- 检测 CXX 编译特性 - 完成 G:/.vcpkg/installed/x64-windows/share/rtabmap/RTABMapConfig.cmake:78 处的 CMake 警告(消息): 要求“gui”模块,但 RTABMap 尚未构建具有 gui 支持。 调用堆栈(最近的调用在前): G:/.vcpkg/scripts/buildsystems/vcpkg.cmake:843 (_find_package) CMakeLists.txt:6 (find_package)

-- 发现 RTABMap: RTABMap_CORE_RELEASE-NOTFOUND;RTABMap_UTILITE_RELEASE-NOTFOUND;optimized;G:/.vcpkg/installed/x64-windows/lib/zlib.lib;debug;G:/.vcpkg/installed/x64-windows/debug/lib /zlibd.lib
-- 找到 Protobuf:G:/.vcpkg/installed/x64-windows/tools/protobuf/protoc.exe(找到版本“3.21.12.0”) -- 寻找 pthread.h -- 寻找 pthread.h - 未找到 -- 找到的线程:TRUE
-- 发现 TIFF: optimized;G:/.vcpkg/installed/x64-windows/lib/tiff.lib;debug;G:/.vcpkg/installed/x64-windows/debug/lib/tiffd.lib (found version " 4.5.0")
-- 找到 HDF5:hdf5::hdf5-shared(找到版本“1.12.2”)
-- Found ZLIB: optimized;G:/.vcpkg/installed/x64-windows/lib/zlib.lib;debug;G:/.vcpkg/installed/x64-windows/debug/lib/zlibd.lib (找到合适的版本“1.2.13”,最低要求是“1”) -- 发现 JPEG: optimized;G:/.vcpkg/installed/x64-windows/lib/jpeg.lib;debug;G:/.vcpkg/installed/x64-windows/debug/lib/jpeg.lib (found version " 62") -- 找到 ZLIB: optimized;G:/.vcpkg/installed/x64-windows/lib/zlib.lib;debug;G:/.vcpkg/installed/x64-windows/debug/lib/zlibd.lib (found version " 1.2.13") -- 找到 PNG: optimized;G:/.vcpkg/installed/x64-windows/lib/libpng16.lib;debug;G:/.vcpkg/installed/x64-windows/debug/lib/libpng16d.lib (found version " 1.6.39") -- 找到 GIF: optimized;G:/.vcpkg/installed/x64-windows/lib/gif.lib;debug;G:/.vcpkg/installed/x64-windows/debug/lib/gif.lib (找到版本" 5.2.1") -- 找到 LibArchive:G:/.vcpkg/installed/x64-windows/debug/lib/archive.lib(找到版本“3.6.2”) -- 找到 OpenCV:G:/.vcpkg/installed/x64-windows(找到版本“4.7.0”) -- 配置完成 CMake 错误:此项目中使用了以下变量,但它们被设置为 NOTFOUND。 请设置它们或确保在 CMake 文件中正确设置和测试它们: RTABMap_CORE_RELEASE 由目录 G:/FKIE/rtabmap_test 中的目标“RTABMap_Test”链接 RTABMap_UTILITE_RELEASE 由目录 G:/FKIE/rtabmap_test 中的目标“RTABMap_Test”链接

-- 生成完成 CMake 生成步骤失败。无法正确重新生成构建文件。

另一方面,当我运行cmake . -DCMAKE_TOOLCHAIN_FILE=G:/.vcpkg/scripts/buildsystems/vcpkg.cmake时,我得到这个错误:

-- 选择 Windows SDK 版本 10.0.19041.0 以面向 Windows 10.0.19044。 G:/.vcpkg/installed/x64-windows/share/rtabmap/RTABMapConfig.cmake:78 处的 CMake 警告(消息): 要求“gui”模块,但 RTABMap 尚未构建具有 gui 支持。 调用堆栈(最近的调用在前): G:/.vcpkg/scripts/buildsystems/vcpkg.cmake:843 (_find_package) CMakeLists.txt:6 (find_package)

-- Found ZLIB: optimized;G:/.vcpkg/installed/x64-windows/lib/zlib.lib;debug;G:/.vcpkg/installed/x64-windows/debug/lib/zlibd.lib (找到合适的版本“1.2.13”,最低要求是“1”) -- 找到 ZLIB: optimized;G:/.vcpkg/installed/x64-windows/lib/zlib.lib;debug;G:/.vcpkg/installed/x64-windows/debug/lib/zlibd.lib (found version " 1.2.13") -- 配置完成 CMake 错误:此项目中使用了以下变量,但它们被设置为 NOTFOUND。 请设置它们或确保在 CMake 文件中正确设置和测试它们: RTABMap_CORE_RELEASE 由目录 G:/FKIE/rtabmap_test 中的目标“RTABMap_Test”链接 RTABMap_UTILITE_RELEASE 由目录 G:/FKIE/rtabmap_test 中的目标“RTABMap_Test”链接

-- 生成完成 CMake 生成步骤失败。无法正确重新生成构建文件。

两个缺少的变量设置在位于 RTABMap 存储库根目录的 RTABMapConfig.cmake.in 中,并由 CMakeLists.txt 使用,所以我假设我不必手动设置它们,这意味着——尽我所能告诉——当 vcpkg 安装 RTABMap 时,它没有正确配置 RTABMap。

该怎么办?

【问题讨论】:

  • 两个缺少的变量在位于 RTABMap 存储库根目录的 RTABMapConfig.cmake.in 中设置并由 CMakeLists.txt 使用,因此我假设我不必手动设置它们不,当您配置和生成项目时,RTABMapConfig.cmake.in 文件应该使用 https://cmake.org/cmake/help/latest/command/configure_file.html 在构建文件夹中生成一个 RTABMapConfig.cmake 文件
  • 但这正是 RTABMap 的 CMakeLists.txt 中发生的情况。所以我不完全跟着你。
  • 您说当 CMake 生成 RTABMap 项目时,您在 RTABMapConfig.cmake.in 中发现了两个缺失的变量,它应该填充生成的 RTABMapConfig.cmake 文件中的变量。当您在 CMakeLists.txt 中使用 find_package() 时,这些应该在 find_package 读取此文件时使用。有RTABMapConfig.cmake文件吗?

标签: c++ cmake vcpkg


【解决方案1】:

由于字符限制,我不得不将其写为答案。然而,它更多地是关于要看什么而不是如何修复它的提示。

我们来看看RTABMapConfig.cmake是如何通过前驱文件RTABMapConfig.cmake.in生成的:

第 18-21 行:

find_library(RTABMap_CORE_RELEASE NAMES rtabmap_core NO_DEFAULT_PATH HINTS @CONF_LIB_DIR@)
find_library(RTABMap_CORE_DEBUG NAMES rtabmap_cored NO_DEFAULT_PATH HINTS @CONF_LIB_DIR@)

IF(RTABMap_CORE_DEBUG AND RTABMap_CORE_RELEASE)
#...

不适合 .cmake.in,但我不会对此做出判断。我要说的是,它的部分代码依赖于设置的某些变量。与您这一代中的 "NOT FOUND" 相同的变量,即生成步骤中的这一行:

-- [...] RTABMap_CORE_RELEASE-NOTFOUND [...]

如果您向下遍历 .cmake.in 文件,您会注意到另一个 "NOT FOUND" 变量也是如此。

后来我们有:

第 47 行:

set(RTABMap_LIBRARIES ${RTABMap_CORE} ${RTABMap_UTILITE})

这是(你现在可能知道)空的.

结论和可能的解决方案:


RTABMapConfig.cmake 找不到合适的库(如果存在的话),这可能是由于在 vcpkg install 阶段出现问题并且没有构建库或者RTABMapConfig.cmake 生成的很差,需要修复(特别是 coreutilite 库的路径)

  1. 检查是否存在rtabmap_core.lib之类的东西,如果不存在 - 编译失败,您需要重新安装rtabmap
  2. 如果 ad1) 不是这种情况,则打开 RTABMapConfig.cmake 并查看这些库的路径 - 如果需要,修复它们。

    编辑:如果我是你,我会在 vcpkg 的 github 上提出一个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多