编译大型项目记录
基本以下面这种模板形式来记录
1.直接报的错误
2.分析错误原因
3.尝试的解决方法
4.最终解决的方法
Python.h: 没有那个文件或目录
RVS python 依赖python3
sudo apt-get install python3-dev
/usr/include/c++/5/bits/list.tcc:348:20: error: no match for ‘operator<’ (operand types are ‘RVS::Robotics::LieGroup::SO2
’ and ‘RVS::Robotics::LieGroup::SO2 ’)
可能是需要C++14
是eigen 出问题了,使用不是我自己在 RVS/install 的eigen ,而是之前install 在系统里面的eigen
from /usr/include/eigen3/Eigen/
cmake 寻找路径可能先从user/include, 如何在cmake 里面强制指定eigen路径\
卸载eigen :
sudo rm -rf /usr/include/eigen3 /usr/lib/cmake/eigen3 /usr/share/doc/libeigen3-dev /usr/share/pkgconfig/eigen3.pc /var/lib/dpkg/info/libeigen3-dev.list /var/lib/dpkg/info/libeigen3-dev.md5sums
安装eigen3.2
error: ‘using MatXd = RVS::Common::Mat
{aka class Eigen::Matrix }’ has no member named ‘bdcSvd’
又是eigen 问题,svd 库没有编译,找不到svd
temp solution :
注释掉通过svd分解部分(这个解决方法有点敷衍,但是他们提供了两种方法来求,应该也是有同样的问题)
// dthetalist = jacobian.BDCSVD(Eigen::ComputeThinU | Eigen::ComputeThinV).solve(pose_error);
dthetalist = jacobian.colPivHouseholderQr().solve(pose_error);
MatXd pinvJb = (jacobian.transpose() * jacobian).inverse() * jacobian.transpose();
dthetalist = pinvJb * pose_error;
4. /home/deng/ros/RVS/Source/RVS/Include/RVS/Robotics/RobotController/GenericRobotController.h:13:26: fatal error: ReflexxesAPI.h: 没有那个文件或目录
没有安装RML,直接从github找到的有些问题,按照readme里面的编译不成功,后来是在其他地方找到的源码,但还是有一个问题,原来的CMakeLists
里面链接的是libTypeIIRML.a
,我在RML编译之后的静态库里面只看到了libReflexxesTypeII.a
,并且还需要在rml的makefile 里面修改 g++ ,添加-fPIC
生成地址无关的代码.
TO-DO 以后在fix
5./home/deng/ros/RVS/Source/RVS/Modules/Robotics/Kinematics/OpswKinematics.cpp:225:23: error: ‘isnan’ was not declared in this scope
参考描述
解决:添加作用域,std::isnan()
/home/deng/ros/RVS/Install/FCL/include/fcl/math/constants.h:131:1: error: expected primary-expression before ‘typedef’
出问题的代码:typedef typename detail::ScalarTrait
::type Real;
参考链接:
https://github.com/flexible-collision-library/fcl/issues/339
fcl版本问题,ubuntu ros-kinetic安装的fcl
与我自己源码安装的版本不一致(detail explainhttps://github.com/flexible-collision-library/fcl/issues/330#issuecomment-426004155``)`
于是我源码安装fcl-0.5
与ros 里面保持一致(后期要是换了新的环境,没有ros 应该就不会有这个问题)
7./home/deng/ros/RVS/Source/RVS/Include/RVS/Robotics/LieGroup/SO2Tangent.h:413:23: error: call of overloaded ‘Matrix(int)’ is ambiguous
初步发现可能是gazebo
里面的类型与之冲突
卸载gazebo
解决:
直接注释掉所有 CHECK(t1.Coeffs() == Vec(0));
,这个不是解决问题的方法,只是为了能够通过编译
TO-DO
[ 58%] Linking CXX shared module ../../../../Lib/Python/RVS/Robotics/PyRobotics.cpython-35m-x86_64-linux-gnu.so lto-wrapper: fatal error: /usr/bin/c++ returned 1 exit status
编译pybind 链接出现问题,lto-wrapper
尝试关闭,或者换成高版本编译器
未解决
心得
no need to build all project ,is too big ,even if I found solution ,it have no benefit for I learning code ,besides ,if I fast complie all project ,I will not spend time in this project ,this is human’s weakness.
For now I can learn some already build bin , like ompl and SE3.