You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS同时安装QT5与QT6时PX4 SITL基于Gazebo的构建失败问题

问题根本原因
  • 头文件搜索路径优先级逻辑:编译参数中-isystem /usr/local/include的排序远早于QT5的头文件路径/usr/local/opt/qt@5/lib/QtWidgets.framework/Headers,Clang编译器处理头文件搜索时会按参数传入顺序依次查找,在靠前路径找到匹配头文件就会停止后续搜索。/usr/local/include是CMake查找系统依赖时自动添加的公共系统头文件路径,无需你手动配置就会出现在编译参数中,你设备上该路径下的QtWidgets等头文件是QT6安装时创建的软链接,所以编译器优先匹配到了QT6的头文件。
  • Gazebo头文件的无版本引用:你引用的Gazebo GUI模块头文件/usr/local/include/gazebo-11/gazebo/gui/qt.h中,对QT头文件的引用格式为#include <QtWidgets/QComboBox>,没有指定QT版本路径,完全依赖头文件搜索顺序匹配对应版本的头文件,进一步放大了路径优先级问题的影响。
无需卸载QT6的解决方案
  • 调整CMake头文件搜索优先级:在sitl_gazebo项目的CMakeLists.txt中添加语句include_directories(BEFORE SYSTEM ${Qt5Widgets_INCLUDE_DIRS} ${Qt5Core_INCLUDE_DIRS} ${Qt5Gui_INCLUDE_DIRS}),强制QT5的头文件路径排在所有系统路径之前被搜索。
  • 临时调整pkg-config优先级:构建前执行命令export PKG_CONFIG_PATH="/usr/local/opt/qt@5/lib/pkgconfig:$PKG_CONFIG_PATH",让依赖查找逻辑优先匹配QT5的配置。
  • 临时取消QT6的软链接:执行brew unlink qt,仅移除QT6在/usr/local下的公共软链接,不会卸载QT6,需要使用QT6时执行brew link qt即可恢复。

内容的提问来源于stack exchange,提问作者Jerry Mailloux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:27:00