linuxdeployqt を使用して Ubuntu で Qt プログラムをパッケージ化する問題を解決する

linuxdeployqt を使用して Ubuntu で Qt プログラムをパッケージ化する問題を解決する

いくつかの Qt インターフェース プログラムを作成しましたが、Qt 環境がインストールされていない他のコンピューターに移植するのが難しいことがわかりました。情報を調べたところ、Windows には windowsdeployqt プログラムがあり、Linux には linuxdeployqt があり、これらを使用してパッケージを迅速に作成できることがわかりました。

1. Qt環境を設定する

まず、Qt 環境を設定し、~/.bashrc に次の行を追加します。

エクスポート PATH=/home/xl/Qt5.9.2/5.9.2/gcc_64/bin:$PATH
LD_LIBRARY_PATH=/home/xl/Qt5.9.2/5.9.2/gcc_64/lib:$LD_LIBRARY_PATH をエクスポートします。
エクスポート QT_PLUGIN_PATH=/home/xl/Qt5.9.2/5.9.2/gcc_64/plugins:$QT_PLUGIN_PATH
エクスポート 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 は glibc 2.26 を使用し、OBS で使用されます
    /*if (strverscmp (glcv, "2.27") >= 0) { //コメントバージョンチェック qInfo() << "エラー: ホストシステムが新しすぎます。";
      qInfo() << "最も古いバージョンよりも新しいバージョンの glibc を搭載したシステムで実行してください";
      qInfo() << "現在もサポートされているメインストリームディストリビューション (xenial)、つまり glibc 2.23。";
      qInfo() << "これにより、結果として得られるバンドルは、現在もサポートされているほとんどの Linux ディストリビューションで動作します。";
      qInfo() << "詳細については、以下を参照してください";
      qInfo() << "https://github.com/probonopd/linuxdeployqt/issues/340";
      1 を返します。
    }*/

その後、cmake と make を使用してコンパイルできます。生成された実行可能プログラムはtools/linuxdeployqt/linuxdeployqtです。

最後に、使いやすさのために、生成された実行可能プログラムをシステムの/usr/local/bin/ディレクトリにコピーできます。

3. パッケージ

Qt でコンパイルされたプログラムを別のフォルダーにコピーします。

次に、 linuxdeployqt appname.

通常は問題なく完了します。カレントディレクトリに Apprun がありますので、そのまま実行してください。

しかし、システム内に対応するライブラリが不足しているため、スムーズに動作しないこともあります。たとえば、私が遭遇したエラーは次のとおりです。

エラー: patchelf を起動できませんでした。
エラー: $PATH にインストールされていることを確認してください。
エラー: patchelf "libQt5Widgets.so" で rpath を読み取り中にエラーが発生しました: ""
エラー: patchelf "libQt5Widgets.so" で rpath を読み取り中にエラーが発生しました: ""

このエラーは、必要な pathchelf ツールが見つからないことを示し、直接インストールすることで解決できます。

sudo apt install patchelf

その後、次のエラーが発生しました。

エラー: ldd 出力行: "libjasper.so.1 => が見つかりません"
エラー: バイナリ: "/home/xl/Qt5.9.2/5.9.2/gcc_64/plugins/imageformats/libqjp2.so"
エラー: すべてのライブラリが ldd によって検出されることを確認してください。中止します。

これは、システムに libqjp2.so ライブラリが存在しないことを示しています。実は非常に奇妙です。ローカル バージョンは明らかに実行できるのに、なぜこのライブラリ ファイルが欠落しているのでしょうか?しかし、解決策は非常に簡単で、不足しているものをインストールするだけです。

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo aptアップデート
sudo apt インストール libjasper1 libjasper-dev

設置完了後はスムーズに梱包されます。

要約する

上記は、linuxdeployqt を使用して Ubuntu で Qt プログラムをパッケージ化する方法について紹介したものです。お役に立てば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • Ubuntu Linux で Go 言語の Qt 開発環境を構成する方法
  • pyqt を使用して Linux コマンド プログラムをリモートでバッチ実行する方法
  • 組み込み Linux で QT アプリケーションを再起動する簡単な方法 (QT4.8 qws ベース)
  • Ubuntu Linux で Qt を使用して MySQL データベースに接続する方法
  • Linux 環境 (CentOS 6.7 64 ビット) に Subversion 1.9.5 をインストールする方法
  • Linux QT Kit が見つからない、バージョンが空の問題の解決策

<<:  Mysql でよく使用される時間、日付、変換関数の概要

>>:  vue-router からのフロントエンドルーティングの 2 つの実装

推薦する

jQuery タグセレクターの適用例の詳細な説明

この記事では、jQueryタグセレクターアプリケーションの具体的なコードを例として紹介します。具体的...

JSはオンラインでのアナウンスのスクロール効果を実現します

この記事では、オンラインアナウンスのスクロール効果を実現するためのJSの具体的なコードを参考までに共...

Linux Tensorflow2.0のインストール問題を解決する

conda アップデート conda pip で tf-nightly-gpu-2.0-previ...

CSS3 カテゴリメニュー効果

CSS3 カテゴリ メニューの効果は次のとおりです。 html <html> <ヘ...

Vueはページキャッシュ機能を実装する

この記事の例では、ページキャッシュ機能を実装するためのVueの具体的なコードを参考までに共有していま...

Vueコンポーネントドキュメント生成ツールライブラリのメソッド

目次.vue ファイルの解析文書情報を抽出するコンポーネント名、説明、プロパティ、メソッド、モデルを...

MySQLがOracleのnvlと同様の機能を持つことができるかどうかについての簡単な議論

isnullの代わりにifnullを使用するisnull は、null かどうかを判断するために使用...

MySQL ページングの制限パラメータの簡単な例

Mysqlページングの2つのパラメータ ユーザー制限 1,2 から * を選択 1 は検索する最初の...

mysql5.7 以降で my.ini を設定するための詳細な手順

Windows 64 ビット版 MySQL 5.7 以降の解凍パッケージにデータディレクトリ、my-...

モバイルレイアウト用の動的REMの実装

ダイナミックレム1. まず、現在の長さの単位を紹介しましょうpx em Mの幅 / 漢字の幅 1em...

docker システムコマンドセットの使用

目次docker システム df docker システム プルーンdocker systemc 情報...

HTML に FLASH へのリンクを追加し、すべての主要ブラウザと互換性を持たせる方法

まずコードを見てみましょうコードをコピーコードは次のとおりです。 <div style=&qu...

ブラウザ間の hr 区切り文字の違い

Webページを作るときに、区切り線hrを使うことがありますが、IE6やIE7で表示するのは非常に苦痛...

MySql インデックスはクエリ速度を向上させる一般的な方法のコード例

インデックスを使用してクエリを高速化する1. はじめにWeb 開発には、ビジネス テンプレート、ビジ...

Bツリーの特性の紹介

B ツリーは一般的なデータ構造です。彼と一緒にB+ツリーがあります。ここで、概念を明確にする必要があ...