动态链接到海洋内部的Public \ Qt

时间:2019-01-29 11:35:17

标签: qt ocean

使用Petrel 2016.1

图书馆参考: https://www.ocean.slb.com/~/media/files/testing%20plug%20ins/libraries/petrel_2016-1_3rd_party_libraries.html

我的插件对窗口使用Qt并使用qwt绘制一些图。我想链接到Petrel \ Public \ Qt中存在的Qt dll,以在部署应用程序时节省一些空间,并且因为不可能通过策略将Petrel中已经存在的库作为公共库进行部署。 我已经成功链接了同一个Qt版本。问题是PluginPackager.exe没有看到这些库。我试过在Petrel目录中编辑PluginPackager.exe.config以包含Public \ Qt,将其复制到Release文件夹,将其复制到主项目文件夹,并且我可能怀疑PluginPackager.exe的每个目录都在寻找该文件,但是没有似乎会造成任何影响。

我已将Qt dll复制到Release文件夹,因此PluginPackager.exe可以查看它们并注册插件。即使后来我从Release文件夹中删除Qt dll,它也能正常工作。 Petrel正在从Public \ Qt加载它们。问题是当我尝试打开Qt窗口时,出现一条消息,提示Qt无法加载插件窗口。

我发现它与qwindows.dll有关,后者位于Public \ Qt \ plugins \ platforms中。如果将环境变量QT_QPA_PLATFORM_PLUGIN_PATH设置为C:.. \ petrel ... \ Public \ Qt \ plugins \ platforms,它可以正常工作。我尝试从QApplication使用addLibraryPath()失败。

我想我们在Public \ Qt中拥有了所需的一切,但由于某种原因,Petrel找不到了。然后是两个问题:

1-如何使PluginPackager看到Public \ Qt中的所有库?

2-如何使我的应用程序找到qwindows.dll?

插件在C#,C ++ cli和C ++中具有代码

编辑1: 好的,对于第二季度,我通过反复试验找到了解决方案。

QString path = QDir::currentPath();
QString finalPath = QDir(path).filePath("Public/Qt/plugins");
QApplication::addLibraryPath(finalPath);

这会将插件dir添加到qt lib搜索路径并完成操作。我希望我可以使用它进行部署。

编辑2: 对于Q.1

我现在意识到PluginPackager只在Extensions文件夹中看到东西。我认为问题在于文件夹名称“ Public”具有误导性。这使我认为开发人员可以自由使用该文件夹中的所有库。 《海洋指南》指出,“扩展”内部的所有库均被视为内部库:

  

PluginPackager.exe假定Petrel安装目录树中的文件(而不是Extensions文件夹中的文件)是内部Petrel库。

那么,如果文件夹中的所有库都是内部的,为什么还要命名为Public呢?这真是令人困惑。此外,“公用”文件夹中的Slb.Ocean库可以使用,其他不是吗?由于PluginPackager.exe.config具有Public \,但其中没有文件夹。

0 个答案:

没有答案