Ubuntu安装osqp-eigen最简单且一定不会出错的方法

标题档抱歉~不一定是最简单的但一定是不会出错的。

如果按照现在大多说教程说的安装方法:先git clone osqp库的源码,然后编译安装。最后再git clone osqp-eigen库的源码,然后编译安装。这种方法大概率会出错。错误要么是找不到osqp相关的.h头文件,要么可能找不到相应的函数libOsqpEigen.so.0.8.1: undefined reference to `osqp_update_upper_bound’。

出错的核心因为osqp-eigen依赖的老版本的osqp库。如果用新版本的osqp库的话,就会有一系列不匹配的问题。所以第一个解决办法是安装老版本的库,osqp-eigen的版本是0.8.1,osqp的版本是0.6.3. 这个方法测试是可行的。但是有没有更简单的解决办法呢?

五步之内必有解药,仔细阅读osqp-eigen的README文件,里面写了最推荐的安装方案:conda一键安装!!!

📦 Install with conda (recommended)

You can easily the library with conda using the following command

conda install -c conda-forge osqp-eigen

conda will automatically install osqp and Eigen3.

安装方法

安装conda

这一步自行搜索,没啥难度也没啥坑。唯一需要注意的anacoda的安装路径是什么,这个路径下面会用到。因为这个安装默认是安装在anncoda目录下的,不是/use/local目录下.

conda安装

conda install -c conda-forge osqp-eigen

使用方法

修改 CMakeLists.txt

添加 OSQP 库的查找和链接
在你的 CMakeLists.txt 文件中,添加对 OSQP 库的查找和链接设置:

cmake_minimum_required(VERSION 3.0.2)
project(my_ros_package)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
)

# 添加 OSQP 和 OSQP-Eigen 的查找路径,注意这里替换为你自己的conda安装路径!!!
set(OSQP_DIR "/home/dawn/anaconda3/lib/cmake/osqp")
set(OSQP_EIGEN_DIR "/home/dawn/anaconda3/lib/cmake/osqp-eigen")

find_package(osqp REQUIRED)
find_package(osqp-eigen REQUIRED)

include_directories(
  ${catkin_INCLUDE_DIRS}
  ${OSQP_INCLUDE_DIRS}      # 包含 OSQP 头文件目录
  ${OSQP_EIGEN_INCLUDE_DIRS} # 包含 OSQP-Eigen 头文件目录
)

add_executable(my_node src/my_node.cpp) #这里替换成你写的文件
target_link_libraries(my_node
  ${catkin_LIBRARIES}
  osqp  # 链接 OSQP 库
 OsqpEigen::OsqpEigen   # 链接 OSQP-Eigen 库
)

然后就可以写代码编译成功啦

PS 知识点1:有些人在链接 OSQP-Eigen 库是使用的是osqp-eigen而不是OsqpEigen::OsqpEigen,为什么也能编译成功?

target_link_libraries 的两种写法在 CMake 中都有效,但它们的语义和使用方式有所不同,具体如下:

1. 不同写法的比较

  • 写法一:

    target_link_libraries(my_node
      ${catkin_LIBRARIES}
      osqp  
      osqp-eigen
    )
    

    在这个写法中,osqposqp-eigen 是直接链接的库名。这种方式简单直观,但依赖于库的名称正确无误,并且在某些情况下可能缺乏对库版本的管理。在第一种写法中,osqp 和 osqp-eigen 是库的名称。这意味着你直接指定了要链接的库,而 CMake 需要确保这些库在系统中可用,并且你需要知道它们的具体名称。

  • 写法二:

    target_link_libraries(my_node
      ${catkin_LIBRARIES}
      osqp  
      OsqpEigen::OsqpEigen
    )
    

这里使用了 OsqpEigen::OsqpEigen 作为链接库,表明 OsqpEigen 是通过 CMake 的目标名称(target name)导入的。这种方式提供了更多的封装和安全性,因为 CMake 会处理库的依赖关系和版本问题。在第二种写法中,OsqpEigen::OsqpEigen 是一个目标名称。目标名称是由库的 CMake 配置文件定义的,通常这种写法表明库具有一些额外的属性,比如版本、依赖关系等。

通过目标名称,你可以享受到 CMake 提供的封装优势。比如,OsqpEigen::OsqpEigen 是在 CMake 配置文件中定义的,CMake 知道这个目标的所有信息,包括其依赖项和版本。如果 osqp-eigen 的维护者更新了库,只需更新 CMake 配置,用户的代码无需修改。

2. 哪种写法更好?

推荐使用目标名称(target name)方式(即第二种写法)。原因包括:

  • 更好的封装性:使用目标名称可以确保 CMake 处理的依赖关系和版本信息,避免手动管理库路径。
  • 便于重用和模块化:如果库被更新或重构,使用目标名称可以减少对代码的影响,因为只需更新 CMake 配置,而不必逐个修改链接命令。
  • 兼容性和可移植性:使用目标名称更具可移植性,适应性强,不受平台和构建系统变化的影响。

3. 使用建议

在你的项目中,尽量使用库的目标名称进行链接,特别是当库支持通过 CMake 提供目标名称时。你可以在 CMake 的官方文档或库的文档中找到目标名称,以确保正确链接。

总体来说,第二种写法更具可维护性和安全性,因此建议使用它来链接依赖库。

### 安装osqp-eigen库的指南 要在Ubuntu系统上成功安装 `osqp-eigen` 库,可以遵循以下方法。此过程涉及多个依赖项以及特定版本的选择。 #### 1. 准备工作 确保系统的软件包管理工具是最新的,并已安装必要的开发工具链。 ```bash sudo apt update && sudo apt upgrade -y sudo apt install build-essential cmake git -y ``` #### 2. 安装OSQP核心库 由于 `osqp-eigen` 是基于 `OSQP` 的封装,因此需要先安装合适的 `OSQP` 版本。推荐使用稳定版以减少兼容性问题[^2]。 ```bash 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 ``` 上述命令克隆了指定版本的 `OSQP` 并完成构建与安装。如果未指定版本号,则可能导致后续编译失败。 #### 3. 安装Eigen库 `osqp-eigen` 需要 Eigen 支持矩阵运算功能。可以通过官方APT仓库快速安装最新版本[^3]。 ```bash sudo apt install libeigen3-dev -y ``` 或者手动从GitHub获取源码并配置环境变量指向其路径。 #### 4. 编译与安装osqp-eigen 接下来下载并编译 `osqp-eigen` 源代码文件夹。 ```bash git clone https://github.com/robotology/osqp-eigen.git cd osqp-eigen mkdir build && cd build cmake ../ make sudo make install ``` 默认情况下,头文件会被放置到 `/usr/local/include` 下面而不是标准目录 `/usr/include/` 中[^1]。这可能影响某些项目的自动检测机制,请确认IDE或脚本正确设置了 `-I/usr/local/include` 参数。 #### 注意事项 - 如果遇到链接错误或其他异常情况,尝试清理旧有残留数据后再重新执行一遍全部流程。 - 对于不同发行版本之间可能存在细微差异的情况,请参照具体文档调整参数设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值