Qt Quick Extension Plugin(扩展插件)多平台问题汇总(CMake/QMake,MinGW/Android)

平台:Win10 22H2

环境:Qt-6.5.3,Qt Creator 11.0.3,MinGW 11.2.0 64-bit,CMake 3.24.2

问题01:编译出错,No rule to make target ...

项目类型:Qt Quick 2 Extension Plugin,MinGW 64-bit

编译系统:CMake

详细问题:

编译时出现以下两种错误之一(不定时出现两种之一·):

 [CMakeFiles\XXX.dir\build.make:88: xxxqmltyperegistrations.cpp] Error 1

No rule to make target 'meta_types/qt6xxx_debug_metatypes.json', needed by 'xxx_qmltyperegistrations.cpp'.  Stop.

原因:项目名称以Q或q开头,如QtPlugin, QPlugin等。

问题02:编译Android的插件出错,No rule to make target ...

项目类型:Qt Quick 2 Extension Plugin,Clang arm64-v8a.

编译系统:QMake

详细问题:

编译时出现以下错误:

:-1: error: No rule to make target '...\build-XXX-Qt_6_5_3_Clang_arm64_v8a-Debug\qmldir', needed by 'libXXX_arm64-v8a.so'.  Stop.

原因:QMake生成的Makefile文件有问题,无法编译。

编译过程中有一步要复制qmldir文件到编译目录,在Makefile中生成一个以目标路径为内容的Target,路径分隔符是“/”:

.../build-XXX-Qt_6_5_3_Clang_arm64_v8a-Debug/qmldir: .../XXX/qmldir
    $(COPY_FILE) ...\XXX\qmldir ...\build-XXX-Qt_6_5_3_Clang_arm64_v8a-Debug\qmldir

生成的库文件的有一个依赖项是上面这个Target,但是不知什么原因,路径分隔符却是“\”,

libXXX_arm64-v8a.so: ...\build-XXX-Qt_6_5_3_Clang_arm64_v8a-Debug\qmldir ...
    $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) $(OBJCOMP)

导致找不到依赖项,无法复制文件,编译不成功。

QMake工程文件XXX.pro中有如下代码:

   copy_qmldir.target = $$OUT_PWD/qmldir # 以qml目标路径为Target,路径分隔符是“/”
   ...
   # 给生成的库文件增加依赖项,不知什么原因,路径分隔符转换成“\”,在MinGW编译没有此问题
   PRE_TARGETDEPS += $$copy_qmldir.target 

 解决方法:

在上面第一句 后面加一句:

    copy_qmldir.target = $$OUT_PWD/qmldir # 以qml目标路径为Target,路径分隔符是“/”
    # 把copy_qmldir.target 的路径分隔符转换成“\”,这样在andriod编译中就能找到依赖项
    copy_qmldir.target = $$replace(copy_qmldir.target, /, $$QMAKE_DIR_SEP)
    ...
    # 给生成的库文件增加依赖项,不知什么原因,路径分隔符转换成“\”,在MinGW编译没有此问题
    PRE_TARGETDEPS += $$copy_qmldir.target 

# 把copy_qmldir.target 的路径分隔符转换成“\”,这样在android编译中就能找到依赖项
copy_qmldir.target = $$replace(copy_qmldir.target, /, $$QMAKE_DIR_SEP)

或者手动从工程目录中把qmldir复制到Andriod编译目录中,也能解决这个问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当在 Linux 系统上运行基于 Qt 的程序时出现 "could not load the Qt platform plugin "xcb" in "/path/to/qtplugins" even though it was found" 错误时,这通常意味着程序找到了 xcb 平台插件,但无法加载它。 要解决这个问题,你可以尝试以下方法之一: 1. 检查依赖项:确保程序所需的 xcb 相关依赖项已经正确安装。你可以使用工具如 `ldd` 来检查程序的依赖关系。运行以下命令来检查是否缺少 xcb 相关的依赖项: ``` ldd /path/to/your/program | grep xcb ``` 如果缺少某些依赖项,请安装它们。具体的安装方法取决于你的 Linux 发行版。 2. 检查 xcb 插件路径:确保 Qt 的 xcb 插件路径正确设置。在程序运行之前,确保 `QT_QPA_PLATFORM_PLUGIN_PATH` 环境变量已经设置为正确的 xcb 插件路径。运行以下命令检查是否设置正确: ``` echo $QT_QPA_PLATFORM_PLUGIN_PATH ``` 如果输出为空或不是正确的路径,请使用以下命令设置正确的路径: ``` export QT_QPA_PLATFORM_PLUGIN_PATH=/path/to/qtplugins ``` 其中 `/path/to/qtplugins` 是包含 xcb 插件的目录。 3. 检查 xcb 库文件:确保系统上的 xcb 库文件正常安装。运行以下命令来检查 xcb 库文件是否存在: ``` find / -name "libxcb.so*" ``` 如果没有找到 xcb 库文件,你需要安装 xcb 库。具体安装方法因 Linux 发行版而异。 请根据你的具体情况和环境选择适合的解决方法。如果问题仍然存在,请提供更多关于你的操作系统、Qt 版本和程序的详细信息,以便我能够更具体地帮助你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值