【问题标题】:Can I change the name of an implicitly linked DLL in an already-built library?我可以更改已构建库中隐式链接的 DLL 的名称吗?
【发布时间】:2020-05-21 04:05:06
【问题描述】:

这是我的用例:我正在多个平台上构建 Python 轮子,其中包含链接到 Boost 的已编译二进制扩展。我需要将相关的 Boost DLL(和其他一些)与轮子捆绑在一起,但我想避免 DLL 地狱。在 MacOS 和 Linux 上,我可以分别使用 'delocate' 和 'auditwheel' 干净地完成此任务。在 Windows 上,我有点不知所措。

我想做的(但不知道该怎么做)是更改二进制扩展名(本身是一个 DLL)中的 DLL 名称,因此它会寻找 boost_filesystem_blargle.dll 而不是 boost_filesystem.dll 哪里 ' blargle' 是随机确定的,因此是唯一的。然后,我将 boost_filesystem.dll 包含在名称 boost_filesystem_blargle.dll 下,并且没有冲突的可能性。

我试图避免延迟加载等需要更改我正在使用的库的源代码的事情——这需要作为构建后的步骤来操作。此外,一些 DLL 导出类,这似乎完全延迟了加载。

这在 Windows 上是否可行?

【问题讨论】:

  • 您可以为依赖项创建程序集。 DLL 可以具有声明依赖程序集的#2 清单。 SxS 融合加载器在加载 DLL 时创建一个激活上下文,它唯一地引用程序集中的文件。无需重命名任何 DLL。
  • DLL 可以有自己的 SxS 程序集吗?在这种情况下,应用程序本身就是 Python 解释器。更具体地说: - 我用 Python 编写 mylibrary.py,它加载 mylibrary_extensions.dll - 我从 C++ 代码编译 mylibrary_extensions.dll 并将其与 mylibrary.py 一起分发 - mylibrary_extensions.dll 链接到 boost_whatever.dll

标签: windows dll linker python-wheel


【解决方案1】:

请参阅machomachomangler,它可用于破坏 DLL 的名称。或者,如果您想要一个可以在修改名称的同时将 DLL 与 Python 轮子捆绑在一起的工具,您可以尝试delvewheel,它在内部使用machomachomangler

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-31
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2011-10-03
    • 2018-06-01
    • 2012-01-17
    相关资源
    最近更新 更多