编译ORBSLAM2时报错

编译ORBSLAM2时报错
Ubuntu20.04 Noetic

img

执行了这句命令后,报错如下

[ 65%] Linking CXX executable ../Examples/Monocular/mono_euroc
/usr/bin/ld: ../lib/libORB_SLAM2.so: undefined reference to `DBoW2::FORB::L'
/usr/bin/ld: ../lib/libORB_SLAM2.so: undefined reference to `DUtils::Random::RandomInt(int, int)'
/usr/bin/ld: ../lib/libORB_SLAM2.so: undefined reference to `DUtils::Random::SeedRandOnce()'
/usr/bin/ld: ../lib/libORB_SLAM2.so: undefined reference to `DUtils::Random::SeedRandOnce(int)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/mono_euroc.dir/build.make:121:../Examples/Monocular/mono_euroc] 错误 1
make[1]: *** [CMakeFiles/Makefile2:88:CMakeFiles/mono_euroc.dir/all] 错误 2
make: *** [Makefile:84:all] 错误 2

我在网上搜到了跟这个报错长得像的,说是opencv版本问题,我按照教程修改了Cmakelists.txt的这个部分

find_package(OpenCV 4.2 QUIET)
if(NOT OpenCV_FOUND)
   find_package(OpenCV 2.4.3 QUIET)
   if(NOT OpenCV_FOUND)
      message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
   endif()
endif()

没有用
网上好像没看到多少人遇到这个报错,请问该怎么解决

编译 ORB-SLAM2 时出现报错 "CMakeFiles/mono_euroc.dir/build.make" 可能是由于 CMake 的配置问题导致的。

建议您尝试以下步骤来解决这个问题:

1、检查您的 CMake 配置是否正确。确保您已经正确安装了所有 ORB-SLAM2 依赖的库,并且这些库的路径已经被 CMake 正确的找到。

2、如果您的 CMake 配置没有问题,则可能是 ORB-SLAM2 代码本身的问题。建议您检查 ORB-SLAM2 代码,确保没有任何语法错误或编译错误。

3、如果上述步骤都无法解决问题,则可能是 CMake 版本的问题。请确保您使用的是最新版本的 CMake。

这个错误是因为在编译应用程序时,编译器无法找到所引用的函数或变量的实际位置。这可能是由于在应用程序代码中使用了未定义的函数或变量,或者是在链接库时没有包含必要的库文件。

要解决这个问题,需要仔细检查代码,确保使用的所有函数和变量都在正确的库中定义,并且在编译时已经包含了这些库。

在本特定情况下,可以试试执行以下步骤来解决问题:

1、确保已经安装了所有依赖项,包括 DBoW2 和 DUtils。这些库是 ORB-SLAM2 依赖的第三方库,在编译 ORB-SLAM2 时必须提供。

2、检查 CMakeLists.txt 文件,确保已将 DBoW2 和 DUtils 添加到库依赖项列表中。这样在编译 ORB-SLAM2 时,编译器就会正确地链接这些库。

3、如果上述步骤都无法解决问题,可以试试使用动态链接库。在编译 ORB-SLAM2 时,可以使用 CMake 参数 -DBUILD_SHARED_LIBS=ON 开启动态链接库选项。

4、在运行应用程序之前,确保系统中已经安装了所有依赖的动态链接库。可以使用 ldconfig 命令来更新系统的链接库缓存。
仅供参考,望采纳,谢谢。