Debug报错:libORB_SLAM3.so: undefined symbol: _ZN5DBoW24FORB1LE
错误日志
编译完ORB_SLAM3后,运行时报DBoW2的Undefined symbol错误:
libORB_SLAM3.so: undefined symbol: _ZN5DBoW24FORB1LE
一般而言,这是因为没找到DBoW2的动态库,或者库版本不一致。但是,因为DBoW2是SLAM常用的包,也可能是之前编译过DBoW2的包并且sudo make install
到系统路径下,导致同名包冲突。
ORBSLAM3工程文件的Thirdparty
文件夹自带了一个DBoW2源码,编译ORBSLAM3会自动编译DBoW2,因此这个报错通常是系统路径下已经有了之前编译过的DBoW2造成的。
解决方法
最简单的方法,sudo find / -name libDBoW2.so
,把在系统路径下的删掉就行了,但会导致其他使用该动态库的工程报错。
另一种更好的方法:
修改Thirdparty
下的CMakeLists.txt
中add_library
和target_link_libraries
的DBoW2
改为DBoW2single
修改ORB_SLAM3下的CMakeLists.txt
,把target_link_libraries
中的libDBoW2.so
改为libDBoW2single.so
然后重新编译整个工程就行了。