arm下增加QT子模块步骤

2025-06-26 20:20:28

工作中会遇到这样一种情况:qt应用程序在运行时提示找不到某个qt的动态库。我遇到的是缺少libQt5Websocket.so,因为应用程序是在x86平台+v10上开发,能够正常编译运行,然后移植到rk3588(aarch64架构)上v10时却报错找不到libQt5Websocket.so。

在rk3588+v10编译过程中遇到报错:

qwebsocket_p.h:65:10: fatal error: private/qobject_p.h: 没有那个文件或目录(no such file or directory )

遇到这种情况百思不得其解,后来经过查证才知道以下几点:

麒麟v10系统默认安装的qt是不完整的,有些子模块并没有安装,例如我遇到的问题是websocket模块并没有安装,而自己的项目中正好使用该模块

默认安装的qt在麒麟v10系统下库文件一般在/usr/lib/aarch64-linux-gnu,头文件一般在/usr/include/aarch64-linux-gnu/qt5下。对于已经安装的动态库来说功能正常,但是对于缺少某个模块需要单独编译时存在缺少头文件的情况,上面的例子就是证明。

编译子模块

到qt网站下载对应版本的子模块源码,下载网址:Index of /download.qt.io,按照下图的顺序下载想要编译的子模块即可。

2. 下载到本地解压,通过执行以下命令完成编译

sudo apt-get install qtbase5-private-dev

cd 源码目录

qmake 

make

make install

AI写代码

bash

或者通过qtcreator打开子模块源码目录,然后进行编译,但是需要注意的是在编译之前一定要执行下面的命令,否则就会报前面的错误。

sudo apt-get install qtbase5-private-dev

AI写代码

bash

执行完该命令后,该命令会在qt默认目录/usr/include/aarch64-linux-gnu/qt5下安装一系列头文件,其中就包括本文前面提到的缺少qobject_p.h头文件的错误。

这里提一下qtbase5-private-dev命令会安装哪些文件,如下所示:

在 mantic 发行版中 arm64 硬件架构下的 qtbase5-private-dev 软件包文件清单

/usr/include/aarch64-linux-gnu/qt5/QtAccessibilitySupport/5.15.10/QtAccessibilitySupport/private/qaccessiblebridgeutils_p.h

/usr/include/aarch64-linux-gnu/qt5/QtAccessibilitySupport/QtAccessibilitySupport


使用子模块

编译完成的子模块会在源码目录下生成一个lib目录,生成的文件会拷贝该该目录下,包含动态库文件和pkconfig相关文件,图示如下:

 通过linux提供的拷贝命令将动态库文件拷贝到qt的安装目录

sudo cp libQt5WebSockets.* /usr/lib/aarch64-linux-gnu

AI写代码

bash

同时将pkconfig下的pc文件拷贝至/usr/lib/aarch64-linux-gnu/pkgconfig目录下

 至此单独编译qtwebsocket子模块完成。

总结

通过这个问题我们学到了什么呢?

1、系统默认的安装你的qt并不是完整的,有些模块默认并没有安装

2、单独编译子模块时,需要执行一些命令将编译qt过程中的一些依赖项安装一下,例如安装qtbase5-private-dev

 

阅读(0) 收藏(0) 转载(0) 举报/Report
前一篇: 未来之路
相关阅读

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有