其他分享
首页 > 其他分享> > 基于不同CPU架构静态编译QT及相关问题

基于不同CPU架构静态编译QT及相关问题

作者:互联网

最近在编译linux客户端的时候,出现了瓶颈,不同的CPU + 操作系统 + 内核版本等,造成了客户端维护越来越繁琐,为了提高维护效率,降低维护成本,因此决定采用静态编译。因为是年前的了,所以好多编译时遇到的报错没有截图(所以仅简单做参考记录)

面临的问题:

  1. 后台服务二进制程序依赖glibc,但是不同的操作系统glibc版本不一致,因此程序在不同操作系统运行时会出现版本不符的问题。
  2. QT界面二进制程序除了上面提及glibc的问题,还因为依赖诸多qt库等,导致在不同操作系统中运行报错。

好啦,有了问题,解决就是了,最开始考虑的是交叉编译,openssl和curl静态编译通过后,在qt编译上一直提示qmake不对,无耐之下,只好采用下下策,在对应cpu架构的机器上编译,我是在三种cpu上编译的(龙芯3A2000-mips64el、鲲鹏920-aarch64、因特尔-x86_64),操作系统呢,找的中标麒麟的,因为发现属他的glibc版本低~

问题解决方案:

  1. glibc如果是静态编译,ubuntu下我发现是可以apt install glibc-static直接安装的,但,静态编译不支持dlopen,所以采取了一个旁门左道,利用glibc高版本兼容低版本的方式,嘿嘿(但有风险的,万一程序使用的api在低版本不支持,或者某一个高版本glibc被指定不兼容此低版本glibc,就JJ了)==》好的解决方法,阅读各种手册,完全脱离对glibc下api的依赖
  2. QT就只能静态编译了,但防止个别库还是有依赖性,在编译时pro文件指定了一个参数:QMAKE_RPATHDIR(运行时动态库首先查找路径)

我的环境中,中标麒麟V7系统信息:

  1. x86_64:glibc(2.20)、qt(5.9.9)
  2. aarch64:glibc(2.17)、qt(5.12.9)
  3. mips64el:glibc(2.20)、qt(5.12.9)

下面是我编译qt时,configure的编译信息:

./configure --prefix=/home/myself/dbus-1 --enable-static --disable-tests
make
make install
./configure -static -release -opensource -confirm-license -prefix /home/myself/qt-5.9.9 -dbus-linked -I/home/myself/dbus-1/include/dbus-1.0 -I/home/myself/dbus-1/lib/dbus-1.0/include -L/home/myself/dbus-1/lib -no-openssl -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-harfbuzz -sql-sqlite -fontconfig -system-freetype -qt-xcb -skip qtwebengine -nomake tools -nomake examples -nomake tests
gmake -j8
gmake install
./configure -static -release -opensource -confirm-license -prefix /home/myself/qt-5.12.9 -dbus-linked -I/home/myself/dbus-1/include/dbus-1.0 -I/home/myself/dbus-1/lib/dbus-1.0/include -L/home/myself/dbus-1/lib -no-webp -no-openssl -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-harfbuzz -sql-sqlite -fontconfig -system-freetype -qt-xcb -skip qtwebengine -nomake tools -nomake examples -nomake tests

gmake -j8
gmake install

下面是静态编译openssl和curl的configure:

./config --prefix=/home/myself/openssl-1.1.1l -fPIC no-shared
make
make install
./configure CFLAGS=-fPIC --disable-ldap --disable-ldaps --disable-shared --disable-threaded-resolver --disable-rt --with-ssl=/home/myself/openssl-1.1.1l/ --prefix=/home/myself/curl-7.70.0
make
make install

其实还涉及到挂载内核驱动,这个只能预编译,在安装的时候根据(cpu架构+操作系统+内核版本),在安装路径中动态查找并挂载了。

编译时用到的源码下载链接,附件太大了,直接百度云吧:

  1. dbus-1.5.12.tar.gz
  2. openssl-1.1.1l.tar.gz
  3. curl-7.70.0.tar.gz
  4. qt-everywhere-opensource-src-5.9.9.tar.xz
  5. qt-everywhere-src-5.12.9.tar
  6. qt-everywhere-src-5.15.2.tar

标签:myself,qt,dbus,CPU,编译,home,glibc,QT
来源: https://blog.csdn.net/qq_21911403/article/details/122849646