14

Qt の LGPL ライセンスに準拠するには、Qt ライブラリを使用するアプリケーションは、ソース コードを利用できるようにするか、Qt に対して動的にリンクする必要があります (この短い言葉で正しく理解している場合)。

ですから、まさにそれを行うクローズド ソース アプリケーションを作成したいと思います。さらに、Windows バイナリを作成するために C++11 をサポートする g++/MinGW を使用して、Linux (現在は Xubuntu 12.04) で開発したいと考えています。後者を達成するために、この役立つガイドに従いました。ただし、ガイドにも記載されているように、静的にリンクされた実行可能ファイルが作成されます。

MXE を使用して Qt ライブラリ (バージョン 5.0) を自動的にダウンロードしてビルドしたため、プロセスに影響を与える機会はあまりありませんでした。私の質問は、Qt ライブラリとそれぞれのアプリケーションの動的にリンクされたバージョンを作成するにはどうすればよいですか?

4

4 に答える 4

10

アップデート

MXE を使用してライブラリの動的バージョンをビルドするための好ましい方法は、ツールチェーンに「共有」オプションを指定することです。

make MXE_TARGETS=i686-w64-mingw32.shared qt5

オリジナル

編集: qtbase の共有バージョンを構築するために、MXE に必要なすべての変更を行った git リポジトリを作成しました。https://github.com/jeremysalwen/mxeで入手できます。ビルドするには、リポジトリをクローンしてから「make qtbase」を実行します。元の投稿を以下に残しました。

だから私はmxe環境をダウンロードしました.qtをコンパイルするために使用されたコードはsrc/qt.mkのヘルプです

基本的な手順は、このコードを qt を構築するための標準的な手順と一致させることです。qt.mk と qtbase.mk の中を見ると、実際には非常に単純で、./configure を実行し、make を実行して、生成されたファイルをインストールするだけであることがわかります。これを見ることができれば、静的/動的にqtを構築するための指示を一致させ、動的な指示に一致するようにqt.mkを変更できるはずです。

いずれにせよ、私は問題を見つけたと思います。違いは、qt をコンパイルするときの「-static」フラグのようです。したがって、qt.mk と qtbase.mk で ./configure に渡される「-static」フラグを単純に削除すると、mxe が動的な qt バージョンをビルドすると予想されます。もちろん、他のことを変更する必要があるかもしれませんが、うまくいけば、これだけで十分です。

于 2013-02-20T09:37:39.977 に答える
5

まず、ワインのセットアップが必要です。

sudo apt-get install wine

次に、Qt5 Windows MinGW SDK Run with wine をダウンロードします

wget http://releases.qt-project.org/qt5/5.0.1/qt-windows-opensource-5.0.1-mingw47_32-x86-offline.exe
wine qt-windows-opensource-5.0.1-mingw47_32-x86-offline.exe

ウィザードに従って Qt をインストールします。それで

cd ~/.wine/drive_c/Qt/Qt5.0.1/Tools/QtCreator/bin
wine qtcreator.exe

qtcreator でサンプルを試してみたところ、コンパイルして Linux で問題なく動作し、Qt がセットアップされた Windows マシンに exe ファイルをコピーすると、問題なく動作しました。

もちろん、欠点の 1 つは、qtcreator と wine を使用するコンパイラを使用するとネイティブに感じられないことです。ネイティブ Linux バイナリと比較してどれだけ遅いかはわかりません。ただし、jom が利用可能であり、プロジェクトがそれほど大きい場合は、複数のコアを使用してコンパイルできます。

qtcreator で make の代わりに jom を使用するには、qtcreator でここを変更します。

projects > Build & Run > Build > Build Steps > Make

jom に置き換え、make 引数 -j N を追加します。ここで、N は使用するコア番号です。

于 2013-04-01T05:55:35.380 に答える
2

私は最近これにつまずいていて、 mxe のオクターブのフォークでいくつかの成功を収めました。彼は、私のニーズを満たす共有 (.dll) ライブラリをサポートする qt をビルドするのに苦労しました。ここに彼の投稿へのリンクがあります。

于 2013-03-27T21:29:09.287 に答える
0

動的リンク用に QT をビルドする必要があります。QT を静的リンク用にビルドした場合 (通常、Linux では .a ファイル)、バイナリは静的になります。Linux で共有オブジェクト ファイル (.so) に対してビルドすると、バイナリは動的にリンクされます。また、アプリケーションに関連する .dll を含める必要があります。これにより、他の誰かが実行可能ファイルを実行したときに、それらのライブラリにアクセスできるようになります。

qt-project.org の QT SDK には、動的にリンクされたファイルが含まれています。

于 2013-02-20T06:02:27.030 に答える