当前位置: 首页 > news >正文

【MPC-C++】qpOASES 源码编译与链接,编译器设置细节

qpOASES 源码编译与链接

克隆源码

git clone https://github.com/coin-or/qpOASES.gitcd qpOASES
mkdir build
cd build

接下来是构建,有一些细节。

查看 CMakeLists.txt,发现如果不显示指定 CMAKE_BUILD_TYPE 构建版本,会自动编译 Release 版本。并使用 CMAKE_CXX_FLAGS_RELEASE 指定了 O3 的最高优化等级。这样效率更优。

IF( NOT CMAKE_BUILD_TYPE )SET(CMAKE_BUILD_TYPE Release CACHE STRING"Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."FORCE)
ENDIF( NOT CMAKE_BUILD_TYPE )IF ( UNIX )SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -Wfloat-equal -Wshadow -DLINUX")SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG} -O3 -finline-functions")
ELSEIF( WINDOWS )SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nologo -EHsc -DWIN32")
ENDIF()

因此以下两个命令等效

cmake ..
cmake .. -DCMAKE_BUILD_TYPE=Release

然后编译

make -j$(nproc)

之后就可以在自己的项目中链接库和头文件。把 build/libsinclude 两个文件夹复制到项目中。

在项目的 CMakeLists.txt 用相对路径进行链接。

target_link_libraries(target${CMAKE_CURRENT_SOURCE_DIR}/xxx/libs/libqpOASES.a
)target_include_directories(simple_planner PUBLIC${CMAKE_CURRENT_SOURCE_DIR}/xxx/include
)

同样建议指定项目的构建版本和优化等级。不同编译器设置求解性能可能相差10倍以上。

# 设置为 Release 构建类型
set(CMAKE_BUILD_TYPE Release)# 设置 C 和 C++ 的 Release 编译标志
set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")

一些对实时性要求高的场合比如 MPC,可以进一步考虑开启架构适配。让编译器自动检测你当前编译机器的 CPU 架构,并为该 CPU 生成最优的本地代码。但是这样可能带来额外的适配性问题,网上有较多的讨论,也不能过于依赖编译器。需要综合数学问题转换、数值求解原理(如根据问题特点选择 qpOASES/OSQP/HPIPM)、求解器配置、代码实现和编译器配置来调优。

set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG -march=native")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -march=native")
http://www.dtcms.com/a/241532.html

相关文章:

  • FastAPI 与 JWT 身份验证:保护你的 API
  • Day10_C语言基础
  • 6个月Python学习计划 Day 18 - 项目实战 · 学生成绩管理系统(OOP版)
  • 什么是EULA和DPA
  • 汇编常见指令
  • 如何高效的组织产品研发团队与产品交付开发团队
  • 【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
  • 等待组(waitgroup)
  • MySQL自定义函数零基础学习教程
  • 销售心得分享
  • ip子接口配置及删除
  • Clean Code 学习总结01 - 物理设计与命名艺术
  • 打开GitHub网站因为网络原因导致加载失败问题解决方案
  • 选取货物 - 题解(0-1背包问题)
  • Python学习(8) ----- Python的类与对象
  • Shellshock漏洞与永恒之蓝(WannaCry)勒索病毒深度分析
  • 记录:外扩GPIOD访问报警告
  • 嵌入式学习Day34
  • DAY 26 函数专题1
  • (每日一道算法题)子集
  • 智能SQL优化工具PawSQL月度更新 | 推出免费私域部署社区版
  • Day09_刷题niuke20250609
  • 高保真组件库:上传
  • 问题复盘-当前日志组损坏问题
  • 源雀Scrm开源版:AI客服会话总结 功能发布
  • PyTorch学习路径与基础实践指南
  • 76. 最小覆盖子串 Java版
  • tomcat核心组件
  • TCP和UDP区别
  • 2025-05-08-deepseek本地化部署