Sophus 链接错误(undefined reference)

在复现FAST_LIO2时,遇到了与Sophus相关的问题,稍微搜了一下应该是链接错误的问题。然后本人之前也在opencv方面遇到类似的问题。这里做一个记录。

具体报错:

然后了解了一下undefined reference的错误

Linux动态库链接问题常见错误(/usr/bin/ld或者undefined reference to)报错_动态库 undefined reference to-优快云博客

详解error while loading shared libraries: ../../lib/libopencv_core.so-优快云博客

问题表现就是,在安装了某个库后,使用cmake去编译其他项目时,无法找到这个库。

纠错的尝试如下:

1.bashrc文件的修改

gedit ~/.bashrc

然后增加语句

修改了这个之后,没有成功,所以接着往下。(不过最后成功的时候,这一项也没有去掉,所以也不清楚这个到底重不重要)

2.重新安装Sophus

删除了原本的文件,然后进行重新的安装。因为这里是为了做FAST_LIV2的项目,所以就按照其要求进行了安装。

通过这个结果,在usr/local/include和usr/local/lib中应该正常安装好了。

  • 头文件安装:

    • 所有的头文件(例如 se3.hscso3.hso2.hso3.hsim3.hse2.h)都被安装到了 /usr/local/include/sophus 目录下。这个路径是标准的安装路径,表示你可以在代码中通过 #include <sophus/se3.h> 这样的方式来引用这些头文件。

  • 库文件安装:

    • libSophus.so 被安装到 /usr/local/lib 目录下。这个文件是 Sophus 的共享库文件,允许其他程序链接到 Sophus 库。

3.通过小程序测试

自己写了一个cpp和cmakelists测试Sophus,发现问题主要出在CmakeLists中。后续根据这个思路修改了项目中的文件。

4.具体修改

在 ~/catkin_livox_ros_driver2/src/FAST-LIVO2 的CmakeLists文件中,用的是

find_package(Sophus REQUIRED)

但在我目前的情况下,手动安装的 Sophus 并没有生成 SophusConfig.cmake,所以 find_package(Sophus REQUIRED) 会找不到。

删去上述的句子,并修改为

set(Sophus_INCLUDE_DIRS /usr/local/include)
set(Sophus_LIBRARIES /usr/local/lib/libSophus.so)

在 # Add libraries之前增加

link_directories(/usr/local/lib)

修改后重新编译,发现还有类似的报错,但是出现的位置不同。所以发现,应该是在~/catkin_livox_ros_driver2/src/rpg_vikit/vikit_common 中的CmakeLists 也需要修改。使用同样的思路修改。具体为删除了find语句,新增了两个set语句。

之后就能顺利编译成功!

5.问题总结与分析

这个是个连接错误的问题。按道理,在复现FAST_LIO2时,它提供的sophus的版本应该是正常合适的,按照其流程应该不会出这样的问题。除此之外,一些可能的影响因素:之前电脑跑过ORBSLAM,所以用其提供的代码安装过Sophus;装了ROS。所以目前的解决方法,算是不太懂为什么,但是能行的通的方法。

/usr/bin/ld: /home/dog/catkin_ws/devel/lib/libvikit_common.so: undefined reference to `Sophus::SE3::exp(Eigen::Matrix<double, 6, 1, 0, 6, 1> const&)' /usr/bin/ld: /home/dog/catkin_ws/devel/lib/libvikit_common.so: undefined reference to `Sophus::SE3::operator=(Sophus::SE3 const&)' /usr/bin/ld: /home/dog/catkin_ws/devel/lib/libvikit_common.so: undefined reference to `Sophus::SE3::SE3()' /usr/bin/ld: /home/dog/catkin_ws/devel/lib/libvikit_common.so: undefined reference to `Sophus::SE3::SE3(Sophus::SE3 const&)' /usr/bin/ld: /home/dog/catkin_ws/devel/lib/libvikit_common.so: undefined reference to `Sophus::SE3::operator*(Sophus::SE3 const&) const' /usr/bin/ld: /home/dog/catkin_ws/devel/lib/libvikit_common.so: undefined reference to `Sophus::SO3::matrix() const' /usr/bin/ld: /home/dog/catkin_ws/devel/lib/libvikit_common.so: undefined reference to `Sophus::SE3::SE3(Eigen::Matrix<double, 3, 3, 0, 3, 3> const&, Eigen::Matrix<double, 3, 1, 0, 3, 1> const&)' /usr/bin/ld: /home/dog/catkin_ws/devel/lib/libvikit_common.so: undefined reference to `Sophus::SE3::operator*(Eigen::Matrix<double, 3, 1, 0, 3, 1> const&) const' collect2: error: ld returned 1 exit status make[2]: *** [rpg_vikit/vikit_common/CMakeFiles/test_vk_common_camera.dir/build.make:134: /home/dog/catkin_ws/devel/lib/vikit_common/test_vk_common_camera] Error 1 make[1]: *** [CMakeFiles/Makefile2:575: rpg_vikit/vikit_common/CMakeFiles/test_vk_common_camera.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... /usr/bin/ld: /home/dog/catkin_ws/devel/lib/libvikit_common.so: undefined reference to `Sophus::SE3::exp(Eigen::Matrix<double, 6, 1, 0, 6, 1> const&)' /usr/bin/ld: /home/dog/catkin_ws/devel/lib/libvikit_common.so: undefined reference to `Sophus::SE3::operator=(Sophus::SE3 const&)' /usr/bin/ld: /home/dog/catkin_ws/devel/lib/libvikit_common.so: undefined reference to `Sophus::SE3::SE3()' /usr/bin/ld: /home/dog/catkin_ws/devel/lib/libvikit_common.so: undefined reference to `Sophus::SE3::SE3(Sophus::SE3 const&)'
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值