文章目录
Eigen OSQP OSQP-Eigen安装
- eigen-3.4.0库的安装
- osqp库的安装
- osqp-eigen库的安装
- 测试三个库是否配置成功
-
// c++三个库的依赖顺序是osqp-eigen依赖osqp,osqp依赖eigen // 安装顺序最好是eigen osqp osqp-eigen
一、前言
- 本人在基于ubuntu安装这三个库的时候出现了各种各样的错误,主流的方案都无法解决,按照最流行的csdn安装方案的都是git clone后开始安装,但是这样只可能安装成功osqp而无法安装成功osqp-eigen,csdn上也有一些解决办法,包括系统识别不了头文件osqp位置更换为
// 一般来说你下载好eigen osqp osqp-eigen后运行我稍后提供的测试代码会出现 // 头文件找不到的情况,默认的程序里头文件包含方式如下 #include <osqp.h> // 你需要将所有的这种包含方式写为如下 #include <osqp/osqp.h>
报错的方式是如下图,说找不到osqp.h,你只要不断make看他报错信息去找对应的文件,将文件里面的#include<osqp.h>修改为#include<osqp/osqp.h>即可,我修改的文件分别是OsqpEigen(注:你要是是按照下叙方法安装这个文件一定在/usr/local/include中)文件中的,Compat.hpp Data.hpp Settings.hpp Solver.hpp,修改到这一步你包含osqp.h头文件的错误肯定没有了,为了方便查看我将要修改的文件以代码块展示
-
Combat.hpp Data.hpp Settings.hpp Solver.hpp // 这些需要修改将#include<osqp.h>修改为#include<osqp/osqp.h> // 注意,你要修改文件的多少是按照编译过程报错决定的,你可能修改的不是这个数量 // 但是只要报错找不到osqp.h这样修改就对了
-
-
在完成我上述一步之后最大的问题来了!!!你接下来继续make测试文件,会出现下图错误
-
我的这张图里面只报错了找不到auxil.h,但是实际上还会报错scaling.h找不到,这个时候你需要修改Solver.tpp文件中的#include<auxil.h>为#include<osqp/auxil.h>,然后按照这样修改scaling.h就可以了,重点(但是你按照一般的教程是不可能如此修改就成功的,因为你会发现为什么我的/usr/local/include/osqp文件中没有auxil.h和scaling.h啊,是的一般来说你的这个文件里面没有,根本没有,博客上写的天花乱坠但是你就是没有这些文件,当然这些文件以及他相关的依赖文件可以从你的主目录里面的osqp/include/private(我如果没记错的话)中找到,或者是/usr/include/osqp/include/private中找到,你可以选择将这些文件的中的auxil.h scaling.h还有别的需要转移的文件都转移到/usr/local/include/osqp中,这样就不会报错找不到auxil.h等等了)
-
-
你以为你成功了?可是你这样做只是解决了头文件找不到的问题,但是当你运行测试文件的时候你依旧不会成功!!! 你会出现下述的全部错误!c_int 没声明 csc没声明等等,你就会想这是源代码的中的为什么会没声明!源代码是不会错的至少不会是声明错误!问题的根本是版本错误!是的osqp-eigen和osqp配合是需要对应版本的!不对应版本你就会出现上述的莫名其妙的错误,文件缺少需要转移的错误!即使你全部修正也还是会报这种声明错误!
-
这个问题你可以从该博主的博客中得到信息,是2023年7月的一篇博客,感谢明天大大!
-
需要注意,在下载osqp时需要指定版本,否则在编译osqp-eigen时会报下图错误。测试时间为2023年07月19日,osqp-eigen的最新版本为v0.8.0,其能够适配osqp的版本为v0.6.3。(博客原话,转载至上述链接)
-
-
到了这一步骤你遇到的问题基本都被解决了,是的版本不对,你再怎么修改也是没有用的,因为不支持,我不知道别人是怎么成功的,反正我按照那些标准答案进行git clone下载的osqp根本不支持osqp-eigen,下面我将会讲述以下成功方案。
-
PS:如果有按照主流安装方法安装成功的人可以告诉我一下怎么操作的(我死活没成功,他们似乎没有遇到错误,按部就班直接成功,第二篇是直接给的网盘下载osqp我没用网盘,可能也他网盘给的是对应的版本的,你们可以试试)
-
附上主流安装方法链接:
-
二、安装eigen osqp osqp-eigen库
-
进行eigen和osqp安装
-
sudo apt install build-essential cmake git libeigen3-dev // 安装eigen库 git clone --recursive -b release-0.6.3 https://github.com/oxfordcontrol/osqp.git cd osqp mkdir build cd build cmake .. make sudo make install source ~./bashrc //刷新环境变量 // 你从github下载的osqp文件一般是在主目录中, // sudo make install会将你的文件安装在/usr/local/include中 // sudo apt install会将你的文件安装在/usr/include中 // 顺利进行到这一步骤,osqp安装完成,你可以选择进行测试验证是否安装成功 // 测试代码如下 cd ~/osqp/build/out ./osqp_demo //运行成功证明你osqp安装成功,实际上osqp安装难度一般,网上的教程基本都能安装成功
-
进行osqp的卸载操作,网上给的命令也是含糊其词,可能大佬知道,但是对我这种Linux萌新是真不友好,很多人直接给了语句说sudo make uninstall即可卸载osqp但是你运行了肯定没用,你需要在你下载的osqp文件中由你创建的build中执行该命令才有效,卸载osqp-eigen也是一样操作即可
-
cd ~ //转移到主目录 cd osqp cd build sudo make uninstall //卸载完毕 // 你可以去osqp的安装目录/usr/local/include/osqp中看,这里面的文件应该是全部删除完毕了 // osqp安装目录不止/usr/local/include/osqp sudo find / -name osqp //该命令可以查找osqp的安装目录/usr/local里面的才是安装文件
-
三、安装osqp-eigen
- 这三个库的安装难度不高,链接难度系数高,有很多坑
-
git clone https://github.com/robotology/osqp-eigen.git cd osqp-eigen mkdir build cd build cmake .. make sudo make install
-
到这一步其实已经安装完毕了,接下来测试即可,测试的时候会出现一些小问题,我在前言里面写了,具体怎么解决也说明了,如果你是按照我的步骤一步一步来是不会出现版本不对最后声明大范围报错的问题的,而且按照我的步骤下载osqp其安装文件/usr/local/include/osqp中自动就有auxil.h,scaling.h等等文件,所以等待我们的只是修改头文件包含方式罢了
-
四、测试代码验证三个库是否链接
-
测试代码来源:
-
//-运行成功说明这三个库安装配置完成,并可以使用 //-按照我的方法应该是可以成功的 //-下载测试文件放入主目录中,然后运行如下代码 cd test_test // 进入test_test文件夹 mkdir build // 然后创建build文件夹 cd build // 再进入build文件夹 cmake .. // 在build文件夹中进行编译 make ./testqjj // 运行当前文件夹下面的可执行程序testqjj
-
运行结果如下,代表成功
-
-
五、疑问
-
下面的代码这是普遍的安装方法,不指定osqp版本,我按照这种流程安装osqp-eigen不会生效,osqp安装目录中还少文件(这样安装的话,/usr/local/include/osqp中没有auxil.h等文件,但是不会影响osqp的运行只会对osqp-eigen有影响),希望有大佬解惑,测试代码都是我上述用的。我很疑惑按照下面代码安装然后进行文件测试会没有错误这件事情,这根本不可能吧?
-
还是说这些教程只管你是否安装完成,至于后续能不能用根本不关心
-
# 安装依赖 sudo apt install build-essential cmake git libeigen3-dev git clone https://github.com/oxfordcontrol/osqp cd osqp mkdir build cd build cmake .. make sudo make install
git clone https://github.com/robotology/osqp-eigen.git cd osqp-eigen mkdir build cd build cmake .. make sudo make install