クロスコンパイルQT 5.12.2

3279 ワード

環境:Ubuntu 18.04クロスコンパイラ:gcc-linaro-7.4.1-2019.02-x 86_64_aarch 64-linux-gnu開発ボードタイプ:rk 3399
1.クロスコンパイラをインストールgcc-linaro-7.4.1-2019.02-x 86_をダウンロード64_aarch64-linux-gnu.tar.xz
sudo tar jxvf gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz
2.環境変数gedit~/を設定.bashrcはgcc-linaro-7.4.1-2019.02-x 86_64_aarch 64-linux-gnuディレクトリ下binのパスファイルにexport PATH=$PATH:/ユーザーディレクトリ/gcc-linaro-7.4.1-2019.02-x 86_64_aarch64-linux-gnu/bin
3.クロスコンパイラがaarch 64-linux-gnu-c++linux-aarch 64-gnu-g++を使用できるかどうかをテストする
4.QTソースをダウンロードQT公式サイトhttp://download.qt.io/対応するソースコードをダウンロードし、sudo tar jxvf gqt-everywhere-src-5.12.2を解凍する.tar.xz
5.用意されたbuild_qt.shスクリプトをQTソースディレクトリに配置
#!/bin/sh  

PREFIX=/    /qt5.12.2_aarch64_linux/ 
SYSROOT=/    /rk3399-build/sysroot
export PKG_CONFIG_SYSROOT_DIR=${SYSROOT}
export PKG_CONFIG_LIBDIR=${SYSROOT}/usr/lib/pkgconfig:${SYSROOT}/usr/lib/aarch64-linux-gnu/pkgconfig:${SYSROOT}/lib/aarch64-linux-gnu/pkgconfig:${SYSROOT}/usr/share/pkgconfig
export PKG_CONFIG_PATH=${PKG_CONFIG_LIBDIR}
./configure -extprefix ${PREFIX}  \
-xplatform linux-aarch64-gnu-g++ \
-sysroot  ${SYSROOT} \
-opensource \
-release \
-shared \
-opengl es2 \
-directfb \
-confirm-license \
-pkg-config \
-qt-zlib  \
-qt-libpng \
-qt-libjpeg \
-qt-xcb	\
-qt-pcre \
-nomake examples \
-nomake tests \
-recheck-all 

ここでsysrootファイルはarmボード上のヘッダファイルとライブラリファイルであり、この後続の補足
6.build_の実行qt.shスクリプト
./build_qt.sh

コンパイルするライブラリがすべて開いていることを確認し、インストールされていないインストールを確認します.
インストールされていなかったgperf bison flexが3つありました
sudo apt install gperf bison flex

インストール後に削除
rm config.*

7.makeパソコンの性能によって
make -j6

途中でエラーが発生し、一部のファイルのコンパイルが完了していないことに気づき、依存項目がコンパイル済みで、ファイルが見つからないことになった.
make

makeはすぐにファイルのコンパイルを完了します
続行
make -j6

途中で出会った問題:1 libpthread.so.0見つからない、ソフト接続が必要
ln -s libpthread.so libpthread.so.0


②コード修正、コンパイル中の文法やコンパイラの問題で、コンストラクタを使用できない場合は、コードを修正します.
    for (const QRect &rect : region) {
        DFBRegion dfbReg(rect.x() + offset.x(),rect.y() + offset.y(),rect.right() + offset.x(),rect.bottom() + offset.y());
        m_dfbSurface->Flip(m_dfbSurface.data(), &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC));
    }
    for (const QRect &rect : region) {
        DFBRegion dfbReg = {rect.x() + offset.x(),rect.y() + offset.y(),rect.right() + offset.x(),rect.bottom() + offset.y()};
        m_dfbSurface->Flip(m_dfbSurface.data(), &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC));
    }

③armボード上のヘッダファイルとライブラリを使用する必要があるため、sysrootのファイルを自機の/usr/lib/および/libフォルダにsudo cp aarch64-linux-gnu/ /lib/ -r入れる必要がある
 sudo cp aarch64-linux-gnu/ /usr/lib/ -r

④コンパイル中にコンパイラがローカルのヘッダファイルやライブラリを使用する必要がある場合、sysrootのファイルが見つかります.この場合、/usr/lib/および/lib/のaarch 64-linux-gnuフォルダを削除または名前変更して、コンパイラにネイティブのディレクトリとファイルを検索させる必要があります.
⑤コンパイル中にエラーが発生し、該当するライブラリ等をインストールする
sudo apt install libssl1.0-dev
sudo apt install libnss3-dev

8.make install
make install -j6


コンパイル完了