5

Windows上のポータブルアプリケーションと同じように、Ubuntu 12.04のQt Creatorで小さなアプリケーションを開発しました。

アプリケーションのバイナリ ファイルを簡単に共有して、アプリケーションを実行できるようにしたいと考えています。QT Creatorでプロジェクトをビルドし、必要なライブラリをアプリケーションディレクトリに配置してから、それらを他のWindowsシステムに転送するだけで、Windowsでこれを正常に実行できます。

あちこち検索したところ、他の Linux ディストリビューションで実行できるように、LSB (Linux Standard Base) 互換性を使用してプロジェクトをビルドする必要があることがわかりました。それはこれを行う正しい方法ですか?

私は Qt も Linux も初めて使用します (シェル スクリプトについてはあまり知りません)。したがって、アプリケーションを LSB 準拠にする方法がわかりません。

次のリンクを参照しました: Distributing Qt-based binaries on Linuxおよび Deploying Qt applications on Linuxですが、何をすべきか理解できませんでした。

また、私と非常によく似た状況を述べているこの質問をここで見つけましたが、私は初心者なので、どうすればよいかわかりません。

さらに、最初の 2 つの記事が 6 年前に書かれたことを考えると、Linux プラットフォームに Qt アプリを展開するためのより簡単な方法が今あるべきではないでしょうか? 静的リンクについても見ましたが、それでよいのでしょうか。Qt Creator 自体を介してこれらすべてを実行できる方法はありませんか?

Linux 用の移植可能な Qt アプリケーションを作成する見込みがない場合、別のコンピューターで Qt プロジェクトをコンパイルして実行するために必要なすべての手順を組み合わせたシェル スクリプトなどの方法があります。たとえば、Qt-SDK が存在しない場合はダウンロードし、qmake と make を実行してから、新しくコンパイルされたアプリケーションがまだ存在しない場合は、それを実行して、ユーザーが 1 つのスクリプトを実行するだけでプログラムを実行できるようにします。

4

3 に答える 3

2

バイナリ アプリケーションを他のLinux ディストリビューションと互換性を持たせることは事実上不可能です。ディストリビューション X で利用可能なライブラリや、そのライブラリのどのバージョンが利用可能かを事前に知ることはできないからです。単一のディストリビューション (Ubuntu など) の中でも、バイナリ アプリケーションに後方互換性があることはほとんどありません。Ubuntu 12.04 でビルドされたものは、そのバージョンの Ubuntu にインストールされているバージョン ライブラリに依存し、そのバイナリを Ubuntu 10.04 で実行しようとすると、ほとんどの場合、十分な最新バージョンの glibc またはその他の必要なライブラリがないという理由だけで失敗します。

ただし、ディストリビューションとそれらのディストリビューションのバージョンの有限リストに制限する場合、このアイデアはより実装可能になります。次に、それらのディストリビューションで使用できるライブラリを確認し、最小公分母を目指すことができます。以前は、いくつかのディストリビューション (Ubuntu、Fedora、OpenSUSE、SLED、Mandriva) をサポートする必要があるバイナリ アプリケーションを維持していましたが、それを行う方法は、ターゲットとしていた最も古いディストリビューションをビルド マシンにインストールすることでした。そうすれば、バイナリ アプリケーションは、それらのディストリビューションで利用可能なライブラリの最も古いバージョンにリンクされます。そのようなライブラリの新しいメジャー バージョンがない限り (これはめったに発生しませんが、ディストリビューションは通常、互換性のために以前のメジャー バージョンをしばらくの間配布します)、コンパイルされたバイナリは、ターゲットとするすべてのディストリビューションと互換性があります。

したがって、私があなたの状況に与える簡単なアドバイスは、まだサポートされている Ubuntu の最も古い LTS バージョン (現時点では 10.04) を開発に使用することです。Ubuntu 12.04 で既に開発したアプリケーションの場合、同じソースを 10.04 で再コンパイルするだけで問題はありません。ただし、コンパイルされた C++ Qt アプリケーションとの 100% の互換性は決して得られないことを理解してください。

Qt がそれほど重要でない場合は、Python、Java、Perl、Ruby などの高レベルまたはインタープリター言語を使用できます。このような言語を使用すると、通常、言語の実装がターゲット ディストリビューションに既にインストールされていると期待できます。

于 2012-07-05T23:37:23.983 に答える
2

ここでの問題は、Linux Standard Base ではなく、必要な Qt の特定のバージョン (またはそれ以降) が存在するかどうかです。

Windows マシンとまったく同じように、ユーザーは Qt のいずれかをインストールしている場合もあれば、まったくインストールしていない場合もあります。Windows では、Linux よりも特定のバージョンの Qt の存在を確認する方が簡単です。したがって、エクスペリエンスを自動化するインストール ツールを作成する方が簡単です。

問題を解決するには、いくつかの方法があります。

  1. プログラムには特定のバージョンの Qt 以上が必要であることをユーザーに通知し、ユーザーに問題の処理を任せます。
  2. 対象とするすべてのディストリビューションのパッケージを作成し、特定のパッケージを作成する方法を学びます
  3. 0Install や Elf Statifier などのプログラムを使用して、必要なすべてのライブラリを含むパッケージ/実行可能ファイルを作成します。

後者は、多くの Windows および Mac プログラムが行うこと (インストーラー内に必要なすべてのライブラリーが含まれている) と似ていますが、共有ライブラリーに大きく依存する Linux では推奨される方法ではありません。

于 2012-07-06T05:13:39.123 に答える
1

Linux にアプリケーションをデプロイするのは悪夢です。幸いなことに、いくつかの解決策があります。このプロジェクトをチェックして、すべての依存関係がバンドルされたポータブル バイナリをビルドします。

http://statifier.sourceforge.net/statifier/main.html

http://www.magicermine.com/index.html

http://www.pgbovine.net/cde.html

別の解決策は、移植可能な 0install パッケージを作成することです:

http://0install.net/

このソリューションをお勧めします。個人的には、最初の 3 つのパッケージャーに問題がありました。

于 2012-07-05T19:24:11.840 に答える