Qtの動的ライブラリ

はじめに



Qtライブラリでの作業を開始する前に、大学でC ++でさまざまなタスクをプログラミングし、仕事ではDelphiを使用しました。 そしてもちろん、その過程で、さまざまなライブラリが作成されました。 それらは、困難を伴って作成されたと言われます。 日常生活では、OOPが提供する利点が十分ではありませんでした。 私は常にライブラリからクラス全体をエクスポートしたかったのですが、これを行うのは簡単、高速、気楽です。 同時に、C ++でライブラリを作成し、DelphiまたはCのプロジェクトでそれらをさらに使用することについての質問はほとんどありませんでした。



そして、ここでQtライブラリを使用した最初のプロジェクトの開発に関与しています。 読書、アシスタント、フォーラム、記事、アイデア、アイデア、アイデア。 このプロジェクトは大規模で、多くのコンポーネントが含まれており、私たちのチームは、たとえば戦闘条件で経験を積んでいます。



ライブラリ作成



その過程で、多くのタスクが提起されました。その1つは、プロジェクトのニーズに合わせてライブラリを作成するための統一された方法論の作成でした。 開発に携わる初心者プログラマーがこのテクニックを利用できるように。 それは非常にシンプルで、経験豊富な開発者がためらうことなく使用しています。



ほとんどの変更は、将来のライブラリの* .proファイルに関するものです。

  1. # # , # pro- . TEMPLATE = lib DESTDIR = dist # . VERSION = 1 . 0 . 0 # TARGET = $$ qtLibraryTarget ( MyLibrary ) # , release debug CONFIG += build_all



  2. # # , # pro- . TEMPLATE = lib DESTDIR = dist # . VERSION = 1 . 0 . 0 # TARGET = $$ qtLibraryTarget ( MyLibrary ) # , release debug CONFIG += build_all



  3. # # , # pro- . TEMPLATE = lib DESTDIR = dist # . VERSION = 1 . 0 . 0 # TARGET = $$ qtLibraryTarget ( MyLibrary ) # , release debug CONFIG += build_all



  4. # # , # pro- . TEMPLATE = lib DESTDIR = dist # . VERSION = 1 . 0 . 0 # TARGET = $$ qtLibraryTarget ( MyLibrary ) # , release debug CONFIG += build_all



  5. # # , # pro- . TEMPLATE = lib DESTDIR = dist # . VERSION = 1 . 0 . 0 # TARGET = $$ qtLibraryTarget ( MyLibrary ) # , release debug CONFIG += build_all



  6. # # , # pro- . TEMPLATE = lib DESTDIR = dist # . VERSION = 1 . 0 . 0 # TARGET = $$ qtLibraryTarget ( MyLibrary ) # , release debug CONFIG += build_all



  7. # # , # pro- . TEMPLATE = lib DESTDIR = dist # . VERSION = 1 . 0 . 0 # TARGET = $$ qtLibraryTarget ( MyLibrary ) # , release debug CONFIG += build_all



  8. # # , # pro- . TEMPLATE = lib DESTDIR = dist # . VERSION = 1 . 0 . 0 # TARGET = $$ qtLibraryTarget ( MyLibrary ) # , release debug CONFIG += build_all



  9. # # , # pro- . TEMPLATE = lib DESTDIR = dist # . VERSION = 1 . 0 . 0 # TARGET = $$ qtLibraryTarget ( MyLibrary ) # , release debug CONFIG += build_all



  10. # # , # pro- . TEMPLATE = lib DESTDIR = dist # . VERSION = 1 . 0 . 0 # TARGET = $$ qtLibraryTarget ( MyLibrary ) # , release debug CONFIG += build_all



  11. # # , # pro- . TEMPLATE = lib DESTDIR = dist # . VERSION = 1 . 0 . 0 # TARGET = $$ qtLibraryTarget ( MyLibrary ) # , release debug CONFIG += build_all





qtLibraryTarget関数について



$$ qtLibraryTarget関数は、バージョン番号とビルドタイプのポストフィックス(Windowsでは「d」、Macでは「_debug」、Linuxではポストフィックスはありません)でライブラリの名前を補完します。 つまり、宛先フォルダーでのアセンブリ後、ファイル(ウィンドウ)が表示されます。



コードを編集する



次に、ライブラリからのコードのエクスポートを構成する必要があります。 これを行うには、新しいヘッダーファイルを作成し、MyLibrary_global.hなどの名前を付けます。 その内容は次のようになります(作成者は動的ライブラリプロジェクトを作成するときにこのファイルを自動的に作成します)。

  1. #ifndef MYLIBRARY_GLOBAL_H
  2. #define MYLIBRARY_GLOBAL_H
  3. #include <QtCore / qglobal.h>
  4. #if定義済み(MyLibrary_LIBRARY)
  5. #MyLibrary_EXPORT Q_DECL_EXPORTを定義
  6. #else
  7. #MyLibrary_EXPORT Q_DECL_IMPORTを定義
  8. #endif
  9. #endif / * MYLIBRARY_GLOBAL_H * /


作成したファイルをプロジェクトに追加します。

  1. HEADERS + = MyLibrary_global h
  2. #そして、エクスポートマクロで必要な行を追加します。
  3. 定義+ = MyLibrary_LIBRARY


クラスと関数をエクスポートする



そして今、最も重要なこと。 ライブラリの外部で表示される必要があるすべてのクラスおよび関数では、以前に定義されたMyLibrary_EXPORTマクロを追加する必要があります(これらのファイルはヘッダーになり、ライブラリバイナリと共に配信される必要があります) たとえば、クラスをエクスポートします。

  1. #include "MyLibrary_global.h"
  2. クラス MyLibrary_EXPORT ComputerManager public QObject {
  3. Q_OBJECT
  4. ...
  5. }
  6. //または関数:
  7. MyLibrary_EXPORT QDebug演算子<< QDebug d const MyObject object ;


Linuxでのライブラリの構築について



すでに述べたように、Linuxでライブラリをビルドする場合、ビルドタイプの接尾辞は設定されていません(これは、qtソースのこのqtLibraryTarget関数の実装を見るとわかります)。 ただし、問題はありません。プロファイルの行を少し調整するだけです。

  1. #オペレーティングシステムがUNIXファミリのものである場合
  2. unix {
  3. CONFIG debug debug | release {
  4. #これは、デバッグバージョンのライブラリの名前です
  5. TARGET = ComputerManagerd
  6. } else {
  7. #そしてそのようなリリース版
  8. TARGET = ComputerManager
  9. }
  10. } else {
  11. TARGET = $$ qtLibraryTarget ComputerManager
  12. }
  13. バージョン= 1 0 0
  14. #Linuxでライブラリを構築するには#最初のパラメーターが必要です(qmake、make all)、
  15. #残りのOSでビルドする2番目。
  16. CONFIG + = debug_and_release build_all
  17. #オブジェクトファイルのフォルダーを指定します。 UNIXライクなオペレーティングシステムの場合、これは重要です。
  18. #これが行われない場合、ライブラリのリリースバージョンのみが収集され、
  19. #または単なるデバッグ。 これは、ファイルが相互に置き換えられるためです。
  20. CONFIG debug debug | release {
  21. OBJECTS_DIR =ビルド/デバッグ
  22. } else {
  23. OBJECTS_DIR =ビルド/リリース
  24. }
pro-fileのこの部分は、Windows、Linux、Macのデバッグバージョンとリリースバージョンで動的ライブラリを同時に作成します。



ライブラリの使用



プロジェクトpro-fileで、次の行を追加します。

  1. #ライブラリヘッダーファイルを含める
  2. INCLUDEPATH + = include / MyLibrary
  3. CONFIG debug debug | release {
  4. #異なるプラットフォーム用のライブラリのデバッグバージョンを接続します
  5. win32 LIBS + = -Llib - lMyLibraryd1
  6. unix LIBS + = -Llib - L. -lMyLibraryd - Wl -rpath lib - Wl -rpath
  7. } else {
  8. #異なるプラットフォームのリリースバージョンのライブラリを接続します
  9. win32 LIBS + = -Llib - lMyLibrary1
  10. unix LIBS + = -Llib - L. -lMyLibrary - Wl -rpath lib - Wl -rpath , .
  11. }


これは、プロジェクトのルートに2つのフォルダーがあることを意味します。

lib-ライブラリバイナリが含まれています。 include-すべてのライブラリヘッダーファイルを含むMyLibraryフォルダーが含まれます。



おわりに



Qtライブラリは、アイデアやプロジェクトを実装するための便利なツールです。 Qtプロジェクトでライブラリを作成することは非常にシンプルで理解しやすい作業であるため、プログラマの生活を大幅に簡素化します。



構文の強調表示:©SoftCoder.ruのブログエディター



All Articles