使用catkin编译依赖qpOASES的ROS代码时遇包配置文件缺失问题
解决catkin编译时找不到qpOASES的问题
问题本质
你克隆的qpOASES并非catkin兼容包,catkin build不会自动编译它,也无法生成find_package所需的qpOASESConfig.cmake或qpoases-config.cmake配置文件,因此主包的CMake无法识别它。
解决方案
方案1:使用catkin封装的qpOASES包
替换为专门适配catkin的qpOASES封装包(如qpOASES_catkin),将其克隆到catkin工作空间的src目录下,直接执行catkin build即可。这类封装包会自动生成catkin所需的配置文件,主包中的find_package(catkin REQUIRED COMPONENTS ... qpOASES ...)就能正常识别。
方案2:手动编译安装qpOASES到系统
进入qpOASES源码目录,手动编译并安装到系统路径,让CMake能全局找到它:
cd ~/catkin_ws/src/qpOASES mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local make -j$(nproc) sudo make install
安装完成后重新执行catkin build,主包的find_package(qpOASES)就能找到系统中的配置文件。
方案3:手动在主包CMakeLists.txt中指定qpOASES路径(临时方案)
如果不想安装到系统,可直接在主包的CMakeLists.txt中手动引入qpOASES的头文件和库:
- 移除
find_package(catkin REQUIRED COMPONENTS)列表中的qpOASES(因为它不是catkin组件)。 - 在CMakeLists.txt开头添加:
# 指定qpOASES的源码根目录(根据实际路径调整) set(QPOASES_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../qpOASES") # 需先手动编译qpOASES到build目录 include_directories(${QPOASES_ROOT}/include) link_directories(${QPOASES_ROOT}/build/lib)
- 在编译节点/库时,链接qpOASES库:
target_link_libraries(你的节点名或库名 ${catkin_LIBRARIES} qpOASES )
额外注意
你的CMakeLists.txt中存在拼写错误:${qpAOSES_INCLUDE_DIRS}应为${qpOASES_INCLUDE_DIRS},修复上述核心问题后可一并修正。
内容的提问来源于stack exchange,提问作者Bilal
相关产品推荐
相关产品推荐

