交叉编译工具链必须在 Sublime Text 和 Qt Creator 中指向同一 sysroot,否则会导致 undefined reference 或调试失败;需统一 sysroot 路径、禁用 Sublime 自动构建、正确设置平台插件参数并配置 moc 目录索引。

交叉编译工具链必须在 Sublime Text 和 Qt Creator 中指向同一 sysroot
很多人在 Sublime Text 里用 xmake 或 make 编译成功,但 Qt Creator 调试时提示 undefined reference to 'qt_platform_plugin_linuxfb',根本原因不是 Qt 版本不匹配,而是两个环境读取的 sysroot 路径不一致——Qt Creator 从 Kit 配置里读,Sublime Text 则依赖 xmake.lua 或 Makefile 中硬编码的路径。
实操建议:
Qt Creator 18.0.2 Windows x86_64 历史版本安装包,适合需要旧版本 IDE、旧项目兼容、Qt/C++ 项目维护、构建套件配置和调试环境回退的用户使用。
- 统一 sysroot 路径:推荐放在
/opt/sysroots/arm64-linux-gnueabihf这类固定路径,避免用~/work/sysroot等含波浪线或空格的路径 - Qt Creator 中检查:
Tools → Options → Build & Run → Kits → [你的 Kit] → Sysroot必须与xmake.lua中set_toolchains("gcc", {sysroot = "/opt/sysroots/arm64-linux-gnueabihf"})完全一致 - 验证方式:在两者中分别运行
arm-linux-gnueabihf-gcc -print-sysroot,输出应相同;若不同,ln -sf软链接比改配置更可靠
Qt Creator 调试器无法加载符号?先关掉 Sublime Text 的 xmake 自动 rebuild
Sublime Text 插件(如 xmake-subl)默认开启保存即构建(on_save_build),而 Qt Creator 的调试器(gdbserver)在 attach 进程时会锁住可执行文件。若此时 Sublime Text 正在重写二进制,gdb 就报 Cannot access memory at address 0x... 或直接拒绝连接。
实操建议:
- 禁用 Sublime Text 的自动构建:在
Preferences → Package Settings → xmake → Settings中设"on_save_build": false - Qt Creator 启动调试前,确认目标板上无残留进程:
killall -9 your_app_name,否则 gdbserver 会复用旧 PID 导致符号错乱 - 调试时只用 Qt Creator 构建 + 运行,Sublime Text 仅用于编辑和快速查看日志(
tail -f /tmp/app.log)
UI 布局在 Qt Creator 设计器里正常,但在嵌入式板子上控件错位
这不是 DPI 或字体问题,而是 QApplication 初始化顺序和平台插件参数没对齐。Qt Creator 设计器用的是 desktop 平台插件,而嵌入式板子必须用 linuxfb,且需显式传参指定 framebuffer 设备路径。
实操建议:
- 确保主函数入口中
QApplication构造时传入平台参数:QApplication app(argc, argv, "linuxfb");,而不是默认构造 - 启动时强制指定 framebuffer:
./your_app -platform linuxfb:fb=/dev/fb0;若用QT_QPA_PLATFORM环境变量,必须在目标板 shell 中 export,不能只在 Qt Creator 的 Run 设置里填 - 检查 framebuffer 分辨率是否与 UI 设计尺寸一致:
cat /sys/class/graphics/fb0/videomode,若为800x480,Designer 中也得按此分辨率拖控件
Sublime Text 里 Ctrl+Click 跳转不到 moc_ 文件里的信号槽实现
因为 moc 生成的文件(如 moc_mainwindow.cpp)不在 Sublime Text 的索引路径内,默认只扫描 src/ 和 include/。Qt Creator 能跳转,是它自己维护了 moc 输出目录的符号表。
实操建议:
- 在 Sublime Text 的项目配置(
Project → Edit Project)中添加:"folders": [{"path": "build/moc"}],其中build/moc是你xmake或qmake实际生成 moc 文件的位置 - 若用
qmake,moc 目录通常在build/下;若用xmake,默认在build/.xmake/linux/arm64/release/moc/,需确认实际路径 - 跳转失效时,先执行一次完整构建(
xmake clean && xmake),确保 moc 文件已生成且时间戳最新
sysroot 和 fb device path 这两个看似次要却决定成败的字符串。

















