2
以下是我的:我的應用程序是靜態編譯Qt 4.5。我正在使用qsqloci
插件(靜態鏈接),它動態加載Oracle庫(oci.dll
,...)。在運行時檢查Qt插件的依賴關係
我希望能夠檢查是否存在oracle dll,並根據結果使用插件功能。
而且問題:
- 這有可能與靜態鏈接的插件?
- 如果沒有,動態鏈接的插件是可能的(應用程序的其餘部分仍然靜態鏈接到Qt)?
- 如果沒有,是否有可能?
以下是我的:我的應用程序是靜態編譯Qt 4.5。我正在使用qsqloci
插件(靜態鏈接),它動態加載Oracle庫(oci.dll
,...)。在運行時檢查Qt插件的依賴關係
我希望能夠檢查是否存在oracle dll,並根據結果使用插件功能。
而且問題:
您可以檢查一個DLL可以通過使用QLibrary
。
庫加載後,而不是開始使用QLibrary::resolve
,你會加載你的插件。
QLibrary lib("oci"); // QLibrary will try the platform's library suffix
if (! lib.load()) {
qDebug() << "Library load error:" << lib.errorString();
return;
}
// load plugin
不能使用QPluginLoader
加載,因爲你是靜態鏈接的插件,但你應該能夠使用QLibrary
。
的manual狀態:
請注意,如果您的應用程序對Qt的靜態鏈接QPluginLoader不能使用。在這種情況下,您還必須靜態鏈接到插件。如果您需要在靜態鏈接的應用程序中加載動態庫,則可以使用QLibrary。
好的,但插件是加載宏'Q_IMPORT_PLUGIN',它定義'在編譯時加載'插件。這個問題並沒有太多的檢測到DLL的可用性,而是動態地「加載」插件。 – gregseth
如果你想要動態的Qt插件,你需要使用一個動態的Qt庫。我編輯過引用手冊。 –
只是爲了確定; soes意味着插件_必須與Qt動態鏈接?或者說,插件_can_可以靜態鏈接到Qt,但_must_應該從應用程序動態加載? – gregseth