我们有一个链接到 Qt5Core.dll 的外部 .lib,但我们的环境包含 Qt5Core_conda.dll

Hen*_*yer 8 dll qt pyqt5

我们有一个Foobar.lib由客户提供的外部库 ( ),它链接到Qt5Core.dll。我们必须在我们自己的代码中使用该库。

在我们的环境中,我们使用 conda 和 conda-forge 提供的 Qt 库,并且 conda-forge 维护者决定将后缀附加 _conda到所有.lib.dll文件(不知道为什么),所以我们最终在Qt5Core_conda.dll我们的PATH.

这是一个问题,因为我们的运行时要么找不到,要么同时Qt5Core.dll加载,这不起作用,因为一个库中的全局变量不会被另一个库(特别是全局变量)看到。Qt5Core.dllQt5Core_conda.dllQApplication

我们遇到的一件事是打开Foobar.lib并手动更改引用从Qt5Core.dllto Qt5Core_conda.dll,但是考虑到名称较大,我们需要向文件添加新字节,这会弄乱其中的地址(我们怀疑如果我们想要减少名称是可能的)

我们正在寻找一种方法来更新/重写Foobar.lib以指向Qt5Core_conda.dll而不是Qt5Core.dll,有什么建议吗?

我们的环境是Windows。

mus*_*nte 6

虽然修补原始库可能的(但前提是要极其谨慎并使用正确的工具),但我不建议这样做。

对于一般情况,一个合乎逻辑且简单的解决方案是简单地使用所需名称复制库,但由于各种原因,这对于 Qt 可能无法正常工作。

一个可行的解决方案是创建一个硬链接,它是一个动态且透明的引用,使其看起来像是实际的文件,而不是常见的 Windowslnk界面。创建硬链接后,对链接的访问与访问原始文件完全相同:唯一的区别是路径和文件名,但它们都引用文件系统中的相同数据对象。

您需要在命令提示符中使用该mklink命令/h,并带有标志(用于硬链接)和目标路径,后跟路径:

mklink /h "path/to/Qt5Core.dll" "path/to/Qt5Core_conda.dll"
Run Code Online (Sandbox Code Playgroud)