目录
一、Sophus安装编译问题
要求安装非模板类的Sophus库,也就是要回滚到a621ff版本,在安装过程中,使用Cmake ..的时候能够顺利通过,接着执行make命令的时候就会卡在5%,报错:
Sophus/sophus/so2.cpp:32:26: error: lvalue required as left operand of assignment
unit_complex_.real() = 1.;
解决方案:
二、对'Sophus::SE3::xxx'未定义的引用
报错:
解决方法:
在rpg_vikit/vikit_common的CmakeLists.txt里添加SET(Sophus_LIBRARIES libSophus.so)
参考链接(不知道这一步是否必要):编译报错undefined reference to `Sophus::SE3::operator*(Eigen::Matrix<double, 3, 1, 0, 3, 1> const&) 解决方法_undefined reference to `sophus::se3::se3()-CSDN博客
三、报错xxx@GLIBCXX_3.4.30
错误信息:libicuu.so.73
文件中未定义对 std::condition_variable::wait(std::unique_lock<std::mutex>&)@GLIBCXX_3.4.30
的引用。这表明系统可能使用了不兼容的 GCC 或 libstdc++ 版本。
解决办法:
1. 检查 GCC 版本:
gcc --version
2. 检查是否支持 GLIBCXX_3.4.30:
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
注意,路径 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
可能会根据系统有所不同。可以使用 locate libstdc++.so.6
或 find /usr -name libstdc++.so.6
来找到正确的路径。
运行上述命令后,会显示 libstdc++.so
支持的所有 GLIBCXX
版本。如果列表中包含 GLIBCXX_3.4.30
,则说明 GCC 版本支持该版本。如果没有,则需要更新 GCC 或 libstdc++
库
3. 更新GCC版本
sudo apt-get install gcc-11 g++-11
GCC 的安装会附带更新的 libstdc++
库,可以通过以下命令查看安装后的库是否包含 GLIBCXX_3.4.30
:
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
切换默认的 GCC 版本
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100
验证是否已成功配置
gcc --version
g++ --version
看起来系统中虽然已经安装了
g++-11
,但当前 g++
命令无法识别。这可能是因为 g++
没有正确地链接到 g++-11
,或者 PATH
环境变量没有包含 g++
所在的目录。
可以手动创建一个符号链接,将 g++
指向 g++-11
:
sudo ln -s /usr/bin/g++-11 /usr/bin/g++
再次使用g++ --version验证,成功