qt之linux库编译

本文详细介绍了在Linux环境下编译Qt库的过程,包括编译前工作,如普通版、带QtMediaPlayer和QtWebEngine的编译;编译安装步骤;添加系统字体;环境配置;以及实现绿色配置和配置Qt Creator的方法。在编译过程中,特别提到了解决各种依赖和编译错误的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、编译前工作

1、普通版

        上官网:https://download.qt.io下载和解压源码,例如:qt-everywhere-opensource-src-5.15.10.tar.xz到目录/home/jaron/workspace/qt-everywhere-src-5.15.10,创建构建目录,例如:/home/jaron/workspace/qt-5.15.10-build,通过终端进入构建目录(注意:configure后会在build目录下自动生成一些源文件,进行make时会找不到而报错,此时就不要创建构建目录了,直接在源码目录进行configuremake),输入命令(注意: 在执行命令前需要先安装OpenGL):
命令选项说明

./../qt-everywhere-src-5.15.10/configure \
-verbose \
-opensource \
-release \
-shared \
-confirm-license \
-make libs \
-c++std c++14 \
-xcb \
-xcb-xlib \
-bundled-xcb-xinput \
-nomake tests \
-nomake examples \
-prefix /opt/qt-5.15.10-ubuntu-x64

推荐: 这里指定了c++14,使用g++ 5.4.0进行编译,高于的话编译过程可能会出错。
说明: 如果要编译出libqxcb.so,则最好增加选项:-xcb -xcb-xlib -bundled-xcb-xinput,如果配置出现错误:

Feature 'xcb' was enabled, but the pre-condition 'features.thread && features.xkbcommon && libs.xcb' failed.

可以先安装再重新配置(重新配置要增加选项-recheck-all):

apt install '^libxcb.*-dev' -y
apt install libx11-xcb-dev -y
apt install libglu1-mesa-dev -y
apt install libxrender-dev -y
apt install libxi-dev -y
apt install libxkbcommon-dev -y
apt install libxkbcommon-x11-dev -y

如果出现警告:

Could not find all necessary libraries for qpa-xcb support in QtWebEngine.

如果还是出现警告,则尝试安装下依赖再试试:

apt install libxss-dev -y
apt install libxxf86vm-dev -y
apt install libxkbfile-dev -y
apt install libxv-dev -y

注意: 编译过程中可能会报错,参考以下提前设置:

2、带QtMediaPlayer

编译Qt库时,会默认集成MediaPlayer,但是在执行配置后可能出现:

Qt Multimedia:
  ALSA ................................... yes
  GStreamer 1.0 .......................... no
  GStreamer 0.10 ......................... no
  Video for Linux ........................ yes
  OpenAL ................................. no
  PulseAudio ............................. yes
  Resource Policy (libresourceqt5) ....... no
  Windows Audio Services ................. no
  DirectShow ............................. no
  Windows Media Foundation ............... no

说明缺少gstreamer依赖,需要安装

apt install libgstreamer1.0-0 -y
apt install libgstreamer1.0-dev -y
apt install libgstreamer-plugins-base1.0-dev -y
apt install gstreamer1.0-plugins-base -y
apt install gstreamer1.0-plugins-good -y
apt install gstreamer1.0-plugins-bad -y
apt install gstreamer1.0-plugins-ugly -y
apt install gstreamer1.0-libav -y
apt install gstreamer1.0-doc -y
apt install gstreamer1.0-tools -y
apt install gstreamer1.0-x -y
apt install gstreamer1.0-alsa -y
apt install gstreamer1.0-gl -y
apt install gstreamer1.0-gtk3 -y
apt install gstreamer1.0-qt5 -y
apt install gstreamer1.0-pulseaudio -y

依赖项安装后需要重新配置和编译安装,可以用gst-inspect-1.0查看gstreamer插件信息,也可以用命令gst-launch-1.0 filesrc location=test.mp4 ! decodebin ! autovideosink测试gstreamer是否安装成功。成功后会在安装目录多出以下链接库:

root@kylin:/opt/qt-5.15.10-kylin-arm64/plugins/mediaservice# ls -lh
总用量 824K
-rw-r--r-- 1 root root  62K 115 08:27 libgstaudiodecoder.so
-rw-r--r-- 1 root root 341K 115 08:27 libgstcamerabin.so
-rw-r--r-- 1 root root 231K 115 08:27 libgstmediacapture.so
-rw-r--r-- 1 root root  82K 115 08:27 libgstmediaplayer.so
-rwxr-xr-x 1 root root  99K 115 08:27 libqtmedia_audioengine.so

注意: QML中VideoOutput不能使用软渲染,这是因为VideoOutput使用QVideoRendererControl项,它需要自定义QSGGeometryNode行为,而它只适配于OpenGL。参考:Qml使用videooutput送入yuv数据无法显示视频。需要在main.cpp中添加OpenGL设置:QQuickWindow::setSceneGraphBackend(QSGRendererInterface::OpenGL);

3、带QtWebEngine

由于QtWebEngine模块基于Chromium内核,会耗内存,最好保证内存大于等于16G
编译QtWebEngine需要先安装相关依赖项。参考官网:https://wiki.qt.io/QtWebEngine/How_to_Try
官方推荐安装:

apt install bison -y
apt install build-essential -y
apt install gperf -y
apt install flex -y
apt install libasound2-dev -y
apt install libcups2-dev -y
apt install libdrm-dev -y
apt install libegl1-mesa-dev -y
apt install libnss3-dev -y
apt install libpci-dev -y
apt install libpulse-dev -y
apt install libudev-dev -y
apt install nodejs -y
apt install libxtst-dev -y
apt install gyp -y
apt install ninja-build -y

如果是在Ubuntu 20.4银河麒麟V10上编译,则需要额外安装:

apt install libssl-dev -y
apt install libxcursor-dev -y
apt install libxcomposite-dev -y
apt install libxrandr-dev -y
apt install libxdamage-dev -y
apt install libfontconfig1-dev -y
apt install libxss-dev -y
apt install libsrtp0-dev -y
apt install libwebp-dev -y
apt install libjsoncpp-dev -y
apt install libopus-dev -y
apt install libminizip-dev -y
apt install libavutil-dev -y
apt install libavformat-dev -y
apt install libavcodec-dev -y
apt install libevent-dev -y
apt install libvpx-dev -y
apt install libsnappy-dev -y
apt install libre2-dev -y
apt install libprotobuf-dev -y
apt install protobuf-compiler -y

编译前进行配置:

./configure \
-verbose \
-opensource \
-release \
-shared \
-confirm-license \
-make libs \
-c++std c++14 \
-xcb \
-xcb-xlib \
-bundled-xcb-xinput \
-nomake tests \
-nomake examples \
-webengine-proprietary-codecs \
-no-feature-webengine-system-ninja \
-prefix /opt/qt-5.15.10-kylin-arm64

其中如果要WebEngineView支持MP4视频播放,需要添加-webengine-proprietary-codecs选项。配置成功后,执行make,建议不要带-j8或其他并行参数,不然会很吃内存资源。

  • 如果出现MPFR相关错误,如:
    在这里插入图片描述
    发现mpfr-3.1.4的版本的src/init2.c52行有断言MPFR_ASSERTN(p >= MPFR_PREC_MIN && p <= MPFR_PREC_MAX);,而高版本的则没有,所以可能需要升级版本,可以从官网https://cygwin.uib.no/x86_64/release/mpfr/下载高版本,如:mpfr-4.1.0并重新编译安装,备份/usr/local/lib/libmpfr.so.4软件链接,重新建立软连接,如:ln -s /usr/local/lib/libmpfr.so.6.0.2 /usr/local/lib/libmpfr.so.4
  • 如果出现ninja错误,如:
    在这里插入图片描述
    大概率可能前面已经有出现编译错误,只需把前面错误解决然后重新make即可。也有可能内存资源不足导致的,重新make或扩大内存后再重新make
  • 虚拟键盘qtvirtualkeyboardqtwebengine中中文输入法不可用(输入中文,会自动提交,中文候选词一闪而过不可选中)。方案:修改源码文件qtvirtualkeyboard/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp,注释掉void QVirtualKeyboardInputContextPrivate::update(Qt::InputMethodQueries queries)函数中update input engine注释下方的commit();函数调用。
    在这里插入图片描述

二、编译安装

        配置成功后,输入命令:make内存最好大于4G以上,不然在某些情况下编译可能会不过,即进入编译流程,等候大约三四个小时,编译成功后,输入命令:make install,即可把qt库安装到目录:/opt/qt-5.15.10-ubuntu-x64

三、添加系统字体

        进入目录:/opt/qt-5.15.10-ubuntu-x64/lib,创建字体目录fonts,可以把.ttf字体文件拷贝到字体目录中。

四、环境配置

        设置环境变量,编辑/etc/profile文件,末尾添加:

export QT_ROOT=/opt/qt-5.15.10-ubuntu-x64
# 运行依赖
export QT_DEBUG_PLUGINS=1 # 开启插件检测
export QML2_IMPORT_PATH=$QT_ROOT/qml # 指定Qt的QML2路径
export QT_PLUGIN_PATH=$QT_ROOT/plugins # 指定Qt的插件路径
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts # 指定Qt的字体路径
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins/platforms  # 指定Qt的平台插件路径
export QT_IM_MODULE=qtvirtualkeyboard # 指定Qt输入法组件(使用Qt自带虚拟键盘)
export LD_LIBRARY_PATH=$QT_ROOT/lib:$LD_LIBRARY_PATH
# 开发依赖
export PATH=$QT_ROOT/bin:$PATH
export CPATH=$QT_ROOT/include:$CPATH
export LIBRARY_PATH=$QT_ROOT/lib:$LIBRARY_PATH
export PKG_CONFIG_PATH=$QT_ROOT/lib/pkgconfig:$PKG_CONFIG_PATH

注意: 当Linux没有安装桌面系统(例如:ukui、gonome等)时,要使Qt窗口能够渲染,需要基于linux framebuffer,所以需要设置环境变量,当窗口显示后杀死程序,系统会停留在Qt程序被杀死前的界面,无法进入命令窗口操作,因此需要设置export QT_QPA_FB_DRM=1,参考:Qt for Embedded Linux

export QT_QPA_PLATFORM=linuxfb
export QT_QPA_FB_DRM=1

五、绿色配置

参考:Windows平台下的绿色配置

六、配置Qt Creator

安装Qt Creator后,运行时,如果出现以下错误:
在这里插入图片描述则需要先执行命令:sudo apt-get install libxcb-xinerama0。或者添加环境变量QT_QPA_PLATFORM,例如:

export QT_QPA_PLATFORM=eglfs
export QT_QPA_EGLFS_INTEGRATION=eglfs_viv
export QT_QPA_EGLFS_FORCEVSYNC=1
export FB_MULTI_BUFFER=2

或者:

export QT_QPA_PLATFORM=linuxfb
Linux环境下使用Qt编译ODBC(Open Database Connectivity)通常涉及以下步骤: 1. **安装依赖项**: 在开始编译之前,需要确保系统中安装了所有必要的依赖项。这通常包括编译器、Qt开发环境、以及ODBC相关的和开发文件。例如,在基于Debian的系统中,你可以使用以下命令安装所需的依赖项: ```bash sudo apt-get install build-essential qt5-default libqt5sql5-odbc libqt5sql5 libodbc-dev unixodbc-dev ``` 2. **配置ODBC源码**: 下载ODBC源码后,需要进入源码目录并执行配置脚本,通常是`configure`脚本,来指定编译选项和安装路径。例如: ```bash cd /path/to/odbc_source ./configure --with-qt-includes=/path/to/qt/include --with-qt-libraries=/path/to/qt/lib ``` 这里的路径需要根据你的系统环境和Qt安装的实际位置进行相应的调整。 3. **编译和安装ODBC**: 配置完成后,使用`make`命令来编译源码,并使用`sudo make install`命令来安装编译好的文件。这会将文件安装到指定的目录,通常是`/usr/local/lib`或其他系统目录。 ```bash make sudo make install ``` 4. **配置Qt项目以使用ODBC**: 在Qt项目中使用ODBC时,需要在`.pro`文件中添加相应的模块和路径。例如: ```pro QT += sql LIBS += -lodbc INCLUDEPATH += /usr/local/include LIBPATH += /usr/local/lib ``` 5. **测试**: 编译并运行你的Qt应用程序,确保ODBC连接和数据操作可以正常工作。 需要注意的是,ODBC编译和使用可能依赖于特定的Linux发行版和其包管理系统。此外,不同的ODBC实现(如 unixODBC, iODBC等)可能有不同的配置和安装方式。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值