QLibrary Class
QLibrary クラスは、実行時に共有ライブラリを読み込みます。詳細...
| ヘッダー: | #include <QLibrary> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 継承元: | QObject |
- 継承されたメンバを含む、すべてのメンバの一覧
- QLibraryはPlugin Classesの一部です。
注:このクラスのすべての関数は再入可能です。
パブリック型
| enum | LoadHint { ResolveAllSymbolsHint, ExportExternalSymbolsHint, LoadArchiveMemberHint, PreventUnloadHint, DeepBindHint } |
| flags | LoadHints |
プロパティ
パブリック関数
| QLibrary(QObject *parent = nullptr) | |
| QLibrary(const QString &fileName, QObject *parent = nullptr) | |
| QLibrary(const QString &fileName, const QString &version, QObject *parent = nullptr) | |
| QLibrary(const QString &fileName, int verNum, QObject *parent = nullptr) | |
| virtual | ~QLibrary() |
| QString | errorString() const |
| QString | fileName() const |
| bool | isLoaded() const |
| bool | load() |
| QLibrary::LoadHints | loadHints() const |
| QFunctionPointer | resolve(const char *symbol) |
| void | setFileName(const QString &fileName) |
| void | setFileNameAndVersion(const QString &fileName, const QString &version) |
| void | setFileNameAndVersion(const QString &fileName, int versionNumber) |
| void | setLoadHints(QLibrary::LoadHints hints) |
| bool | unload() |
静的パブリックメンバー
| bool | isLibrary(const QString &fileName) |
| QFunctionPointer | resolve(const QString &fileName, const char *symbol) |
| QFunctionPointer | resolve(const QString &fileName, const QString &version, const char *symbol) |
| QFunctionPointer | resolve(const QString &fileName, int verNum, const char *symbol) |
詳細な説明
QLibrary オブジェクトのインスタンスは、単一の共有オブジェクトファイル(ここでは「ライブラリ」と呼びますが、「DLL」としても知られています)に対して操作を行います。QLibrary は、プラットフォームに依存しない方法で、ライブラリ内の機能へのアクセスを提供します。 コンストラクタでファイル名を渡すか、setFileName() を使用して明示的に設定することができます。ライブラリをロードする際、QLibrary は、ファイル名に絶対パスが指定されていない限り、システム固有のライブラリ保存場所(Unix ではLD_LIBRARY_PATH など)をすべて検索します。
ファイル名が絶対パスである場合は、まずそのパスを読み込もうとします。 ファイルが見つからない場合、QLibrary は、Unix や Mac では「lib」などのプラットフォーム固有のファイル接頭辞や、Unix では「.so」、Mac では「.dylib」、Windows では「.dll」などの接尾辞を付けて、その名前でファイルの読み込みを試みます。
ファイルパスが絶対パスでない場合、QLibrary は検索順序を変更し、まずシステム固有のプレフィックスとサフィックスを試し、次に指定されたファイルパスを試します。
これにより、ベース名(つまり、拡張子なし)だけで識別される共有ライブラリを指定することが可能になり、同じコードが異なるオペレーティングシステムでも動作し、かつライブラリを見つけるための試行回数を最小限に抑えることができます。
最も重要な関数は、ライブラリファイルを動的にロードする `load()`、ロードが成功したかどうかを確認する `isLoaded()`、およびライブラリ内のシンボルを解決する `resolve()` です。`resolve()` 関数は、ライブラリがまだロードされていない場合、暗黙的にそのライブラリのロードを試みます。 同じ物理ライブラリにアクセスするために、QLibraryの複数のインスタンスを使用することができます。一度読み込まれたライブラリは、アプリケーションが終了するまでメモリ内に残ります。unload() を使用してライブラリのアンロードを試みることができますが、他のQLibraryインスタンスが同じライブラリを使用している場合、この呼び出しは失敗します。アンロードは、すべてのインスタンスがunload() を呼び出したときにのみ行われます。
QLibraryの典型的な用途は、ライブラリ内のエクスポートされたシンボルを解決し、そのシンボルが表すC関数を呼び出すことです。これは「明示的リンク」と呼ばれ、実行ファイルをライブラリに対してリンクする際のビルドプロセスのリンクステップで行われる「暗黙的リンク」とは対照的です。
以下のコードスニペットは、ライブラリを読み込み、シンボル「mysymbol」を解決し、すべてが成功した場合にその関数を呼び出します。ライブラリファイルが存在しない、またはシンボルが定義されていないなど、何らかの問題が発生した場合、関数ポインタは `nullptr ` となり、関数は呼び出されません。
QLibrary myLib("mylib");
typedef void (*MyPrototype)();
MyPrototype myFunction = (MyPrototype) myLib.resolve("mysymbol");
if (myFunction)
myFunction();resolve() が機能するためには、そのシンボルがライブラリから C 関数としてエクスポートされている必要があります。つまり、ライブラリが C++ コンパイラでコンパイルされている場合、その関数はextern "C" ブロックでラップされている必要があります。 Windows では、これには `dllexport ` マクロの使用も必要です。その方法の詳細については、`resolve()` を参照してください。利便性のため、ライブラリを明示的に読み込まずにライブラリ内の関数を呼び出したい場合に使用できる静的な `resolve()` 関数が用意されています:
typedef void (*MyPrototype)();
MyPrototype myFunction =
(MyPrototype) QLibrary::resolve("mylib", "mysymbol");
if (myFunction)
myFunction();QPluginLoaderも参照してください 。
メンバ型のドキュメント
enum QLibrary::LoadHint
flags QLibrary::LoadHints
この列挙型は、ライブラリの読み込み時にその処理方法を変更するために使用できるヒントを表しています。これらの値は、ライブラリの読み込み時にシンボルがどのように解決されるかを示しており、setLoadHints() 関数を使用して指定されます。
| 定数 | 値 | 説明 |
|---|---|---|
QLibrary::ResolveAllSymbolsHint | 0x01 | ライブラリの読み込み時に、resolve() が呼び出されたときだけでなく、ライブラリ内のすべてのシンボルが解決されるようにします。 |
QLibrary::ExportExternalSymbolsHint | 0x02 | ライブラリ内の未解決および外部シンボルをエクスポートし、後でロードされる他の動的ライブラリで解決できるようにします。 |
QLibrary::LoadArchiveMemberHint | 0x04 | ライブラリのファイル名で、アーカイブファイル内の特定のオブジェクトファイルを指定できるようにします。このヒントが指定された場合、ライブラリのファイル名は、アーカイブファイルへの参照であるパスと、その後に続くアーカイブのメンバーへの参照で構成されます。 |
QLibrary::PreventUnloadHint | 0x08 | close() が呼び出されても、ライブラリがアドレス空間からアンロードされるのを防ぎます。後で open() が呼び出されても、ライブラリの静的変数は再初期化されません。 |
QLibrary::DeepBindHint | 0x10 | ロードされたライブラリ内の外部シンボルを解決する際、リンカーに対し、ロード元アプリケーションのエクスポートされた定義よりも、ロードされたライブラリ内の定義を優先するよう指示します。このオプションはLinuxでのみサポートされています。 |
LoadHints 型は、QFlags<LoadHint> の typedef です。これは、LoadHint 値の論理和 (OR) を格納します。
loadHintsも参照してください 。
プロパティのドキュメント
fileName : QString
このプロパティには、ライブラリのファイル名が格納されます
QLibrary は適切な拡張子を持つファイルを自動的に検索するため、ファイル名から拡張子を省略することをお勧めします(isLibrary( )を参照)。
ライブラリをロードする際、QLibrary は、ファイル名に絶対パスが指定されていない限り、システム固有のすべてのライブラリ検索パス(たとえば、Unix ではLD_LIBRARY_PATH )を検索します。ライブラリのロードに成功すると、fileName() は、コンストラクタで指定されたか、setFileName() に渡された場合、ライブラリへの完全なパスを含む、ライブラリの完全修飾ファイル名を返します。
たとえば、Unixプラットフォームで「GL」ライブラリの読み込みに成功した後、fileName()は「libGL.so」を返します。ファイル名が当初「/usr/lib/libGL」として渡されていた場合、fileName()は「/usr/lib/libGL.so」を返します。
アクセス関数:
| QString | fileName() const |
| void | setFileName(const QString &fileName) |
loadHints : LoadHints
load() 関数に対して、その動作に関するヒントをいくつか与えてください。
シンボルの解決方法について、いくつかのヒントを指定できます。通常、シンボルはロード時に解決されるのではなく、遅延解決(つまり、resolve() が呼び出されたとき)されます。loadHints をResolveAllSymbolsHint に設定すると、プラットフォームが対応している場合、すべてのシンボルがロード時に解決されます。
ExportExternalSymbolsHint を設定すると、ライブラリ内の外部シンボルが、その後読み込まれるライブラリで解決可能になります。
LoadArchiveMemberHint が設定されている場合、ファイル名は2つの構成要素から成ります。1つ目はアーカイブファイルへの参照であるパス、2つ目はアーカイブメンバーへの参照です。例えば、fileName libGL.a(shr_64.o) は、libGL.a という名前のアーカイブファイル内のshr_64.o ライブラリを参照します。これはAIXプラットフォームでのみサポートされています。
ロードヒントの解釈はプラットフォームに依存します。これらを使用する場合は、コンパイル対象のプラットフォームについて何らかの仮定を置いていることになるため、その影響を十分に理解している場合にのみ使用してください。
デフォルトでは、これらのフラグはいずれも設定されていないため、ライブラリは遅延シンボル解決でロードされ、他の動的にロードされるライブラリでの解決のために外部シンボルをエクスポートすることはありません。
注:ヒントは 、このオブジェクトがファイルに関連付けられていない場合にのみクリアできます。ヒントは、ファイル名が設定されてからでないと追加できません(hints は、古いヒントと論理和(OR)演算が行われます)。
注: ライブラリがロードされた後にこのプロパティを設定しても 効果はなく、loadHints() はその変更を反映しません。
注:この プロパティは、同じライブラリを参照するすべての `QLibrary ` インスタンス間で共有されます。
アクセス関数:
| QLibrary::LoadHints | loadHints() const |
| void | setLoadHints(QLibrary::LoadHints hints) |
メンバ関数のドキュメント
[explicit] QLibrary::QLibrary(QObject *parent = nullptr)
指定されたparent を使用してライブラリを構築します。
[explicit] QLibrary::QLibrary(const QString &fileName, QObject *parent = nullptr)
指定されたparent を使用してライブラリオブジェクトを構築し、fileName で指定されたライブラリを読み込みます。
fileName にはファイルの拡張子を省略することを推奨します。QLibrary はプラットフォームに応じて適切な拡張子(例:Unix では ".so"、macOS および iOS では ".dylib"、Windows では ".dll")を持つファイルを自動的に検索するためです。(fileName を参照してください。)
[explicit] QLibrary::QLibrary(const QString &fileName, const QString &version, QObject *parent = nullptr)
指定されたparent を使用してライブラリオブジェクトを構築し、fileName で指定されたライブラリと、完全なバージョン番号version を読み込みます。現在、Windowsではバージョン番号は無視されます。
fileName ではファイルの拡張子を省略することを推奨します。QLibrary はプラットフォームに応じて適切な拡張子(例:Unix では ".so"、macOS および iOS では ".dylib"、Windows では ".dll")を持つファイルを自動的に検索するためです。(fileName を参照してください。)
[explicit] QLibrary::QLibrary(const QString &fileName, int verNum, QObject *parent = nullptr)
指定されたparent を使用してライブラリオブジェクトを構築し、fileName で指定されたライブラリと、メジャーバージョン番号verNum をロードします。現在、Windowsではバージョン番号は無視されます。
fileName ではファイルの拡張子を省略することを推奨します。QLibrary はプラットフォームに応じて適切な拡張子(例:Unix では「.so」、macOS および iOS では「.dylib」、Windows では「.dll」)を持つファイルを自動的に検索するためです。(fileName を参照してください。)
[virtual noexcept] QLibrary::~QLibrary()
QLibrary オブジェクトを破棄します。
unload() が明示的に呼び出されていない限り、ライブラリはアプリケーションが終了するまでメモリ上に残ります。
isLoaded() およびunload()も参照してください 。
QString QLibrary::errorString() const
最後に発生したエラーの説明を含むテキスト文字列を返します。現在、errorString は、load()、unload()、またはresolve() が何らかの理由で失敗した場合にのみ設定されます。
[static] bool QLibrary::isLibrary(const QString &fileName)
fileName にロード可能なライブラリの有効なサフィックスが含まれている場合は `true ` を返し、そうでない場合は `false` を返します。
| プラットフォーム | 有効なサフィックス |
|---|---|
| Windows | .dll、.DLL |
| Unix/Linux | .so |
| AIX | .a |
| HP-UX | .sl、.so (HP-UXi) |
| macOSおよびiOS | .dylib、.bundle 、.so |
Unix における末尾のバージョン番号は無視されます。
bool QLibrary::isLoaded() const
load() が成功した場合は `true ` を返し、そうでない場合は `false` を返します。
load()も参照してください 。
bool QLibrary::load()
ライブラリを読み込み、読み込みに成功した場合はtrue を返し、失敗した場合はfalse を返します。resolve()は、シンボルを解決する前に常にこの関数を呼び出すため、明示的に呼び出す必要はありません。状況によっては、ライブラリを事前に読み込んでおきたい場合があるかもしれませんが、その場合はこの関数を使用します。
unload()も参照してください 。
QFunctionPointer QLibrary::resolve(const char *symbol)
エクスポートされたシンボル `symbol` のアドレスを返します。必要に応じてライブラリが読み込まれます。シンボルを解決できなかった場合や、ライブラリを読み込めなかった場合、この関数は `nullptr ` を返します。
例:
typedef int (*AvgFunction)(int, int);
AvgFunction avg = (AvgFunction) library->resolve("avg");
if (avg)
return avg(5, 8);
else
return -1;このシンボルは、ライブラリからC関数としてエクスポートされている必要があります。つまり、ライブラリがC++コンパイラでコンパイルされている場合、この関数はextern "C" でラップされている必要があります。Windowsでは、さらに__declspec(dllexport) コンパイラ指令を使用して、DLLからこの関数を明示的にエクスポートする必要があります。例:
extern "C" MY_EXPORT int avg(int a, int b)
{
return (a + b) / 2;
}ここで、MY_EXPORT は次のように定義されます。
#ifdef Q_OS_WIN
#define MY_EXPORT __declspec(dllexport)
#else
#define MY_EXPORT
#endif[static] QFunctionPointer QLibrary::resolve(const QString &fileName, const char *symbol)
ライブラリ `fileName ` を読み込み、エクスポートされたシンボル `symbol` のアドレスを返します。なお、fileName にはプラットフォーム固有のファイル拡張子を含めないでください(fileName を参照)。ライブラリは、アプリケーションが終了するまで読み込まれたままになります。
シンボルを解決できなかった場合や、ライブラリを読み込めなかった場合、この関数はnullptr を返します。
これはオーバーロードされた関数です。
resolve()も参照してください 。
[static] QFunctionPointer QLibrary::resolve(const QString &fileName, const QString &version, const char *symbol)
完全なバージョン番号version を持つライブラリfileName を読み込み、エクスポートされたシンボルsymbol のアドレスを返します。なお、fileName にはプラットフォーム固有のファイル拡張子を含めないでください(fileName を参照)。ライブラリは、アプリケーションが終了するまで読み込まれたままになります。Windowsでは、version は無視されます。
シンボルを解決できなかった場合、またはライブラリを読み込めなかった場合、この関数はnullptr を返します。
これはオーバーロードされた関数です。
resolve()も参照してください 。
[static] QFunctionPointer QLibrary::resolve(const QString &fileName, int verNum, const char *symbol)
メジャーバージョン番号がverNum のライブラリfileName を読み込み、エクスポートされたシンボルsymbol のアドレスを返します。なお、fileName にはプラットフォーム固有のファイル拡張子を含めないでください(fileName を参照)。ライブラリは、アプリケーションが終了するまで読み込まれたままになります。Windowsでは、verNum は無視されます。
シンボルを解決できなかった場合や、ライブラリを読み込めなかった場合、この関数は `nullptr ` を返します。
これはオーバーロードされた関数です。
resolve()も参照してください 。
void QLibrary::setFileNameAndVersion(const QString &fileName, const QString &version)
fileName プロパティと完全なバージョン番号を、それぞれfileName およびversion に設定します。Windowsでは、version パラメータは無視されます。
setFileName()も参照してください 。
void QLibrary::setFileNameAndVersion(const QString &fileName, int versionNumber)
fileName プロパティとメジャーバージョン番号を、それぞれfileName およびversionNumber に設定します。Windowsでは、versionNumber は無視されます。
setFileName()も参照してください 。
bool QLibrary::unload()
ライブラリをアンロードし、アンロードに成功した場合はtrue を返し、失敗した場合はfalse を返します。
これはアプリケーションの終了時に自動的に行われるため、通常はこの関数を呼び出す必要はありません。
QLibrary の他のインスタンスが同じライブラリを使用している場合、この呼び出しは失敗し、すべてのインスタンスがunload()を呼び出したときにのみアンロードが行われます。
macOS では、ダイナミックライブラリをアンロードすることはできないことに注意してください。QLibrary::unload() はtrue を返しますが、ライブラリはプロセスに読み込まれたままになります。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.