Ubuntuでlinuxdeployqtを使用してQtプログラムをパッケージ化

3292 ワード

Qtインタフェースプログラムを少し書きましたが、他のQt環境がインストールされていないパソコンに移植して実行するのは難しいことがわかりました.資料を調べてみると、windowsにはwindowsdeployqtプログラムがあり、linuxにはlinuxdeployqtがあり、迅速にパッケージ化することができます.

1.Qt環境の構成


まず、Qt環境を~/.bashrcに追加します.
export PATH=/home/xl/Qt5.9.2/5.9.2/gcc_64/bin:$PATH
export LD_LIBRARY_PATH=/home/xl/Qt5.9.2/5.9.2/gcc_64/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=/home/xl/Qt5.9.2/5.9.2/gcc_64/plugins:$QT_PLUGIN_PATH
export QML2_IMPORT_PATH=/home/xl/Qt5.9.2/5.9.2/gcc_64/qml:$QML2_IMPORT_PATH

このうち/home/xl/Qt5.9.2/5.9.2/ディレクトリは、自分のパソコンにインストールされているQtパスに基づいて変更されます.その後、sourec ~/.bashrcを実行して構成を有効にします.

2.linuxdeployqtのコンパイル


プロジェクトのアドレス:https://github.com/probonopd/linuxdeployqt.git . コンパイルされたパッケージをリリースしていますが、Ubuntu 18を使用しているので、システムバージョンが高すぎるので、コードをコンパイルする方法を選択します.コンパイルされたパケットの実行時にシステムバージョンが高すぎることを検出し、実行を継続しないという問題を回避するために、コンパイル前にtools/linuxdeployqt/main.cppの次のコードを注釈します.
        // openSUSE Leap 15.0 uses glibc 2.26 and is used on OBS
        /*if (strverscmp (glcv, "2.27") >= 0) {    // 
            qInfo() << "ERROR: The host system is too new.";
            qInfo() << "Please run on a system with a glibc version no newer than what comes with the oldest";
            qInfo() << "currently still-supported mainstream distribution (xenial), which is glibc 2.23.";
            qInfo() << "This is so that the resulting bundle will work on most still-supported Linux distributions.";
            qInfo() << "For more information, please see";
            qInfo() << "https://github.com/probonopd/linuxdeployqt/issues/340";
            return 1;
        }*/

その後、cmakeとmakeを使用してコンパイルできます.生成された実行可能プログラムはtools/linuxdeployqt/linuxdeployqtである.最後に、使いやすいように、生成された実行可能プログラムをシステムの/usr/local/bin/ディレクトリにコピーすることができる.

3.梱包


Qtコンパイルされた良いプログラムを別のフォルダにコピーします.そして、linuxdeployqt appnameが実行する.一般的には順調に完成し、現在のディレクトリにはApprunがあり、直接実行すればいいです.しかし、それほどうまくいかない場合もあります.システムには対応するライブラリが不足しているはずです.たとえば、私が遭遇したエラーは次のとおりです.
ERROR: Could not start patchelf.
ERROR: Make sure it is installed on your $PATH.
ERROR: Error reading rpath with patchelf "libQt5Widgets.so" : ""
ERROR: Error reading rpath with patchelf "libQt5Widgets.so" : ""

このエラーは、必要なpathchelfツールが不足していることを示しており、直接インストールすれば解決できます.
sudo apt install patchelf

次のエラーが発生しました.
ERROR: ldd outputLine: "libjasper.so.1 => not found"
ERROR: for binary: "/home/xl/Qt5.9.2/5.9.2/gcc_64/plugins/imageformats/libqjp2.so"
ERROR: Please ensure that all libraries can be found by ldd. Aborting.

これは,我々のシステムにlibqjp2.soというライブラリが欠けていることを示している.実は不思議なことに、地元はもう走れるのに、どうしてこのライブラリファイルが欠けているのか.しかし、解決策は簡単で、欠けているものは何でも入れます.
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

インストールが完了したら、スムーズに梱包できました.
転載先:https://www.cnblogs.com/xl2432/p/11124415.html