【问题标题】:How should I handle an "incorrectly" named dll?我应该如何处理一个“错误”命名的 dll?
【发布时间】:2013-04-22 17:55:56
【问题描述】:

我正在尝试使用 Mingw 在 Windows 上编译 autodiff python 库 pyadolc。需要boost python调用底层c++库adol-c。

我首先用 mingw 编译了 boost_python 库 (dll)。生成的dll命名为libboost_python-mgw46-mt-1_53.dll和libboost_python-mgw46-mt-1_53.dll.a,分别位于/mingw/bin和/mingw/lib中。

然后,当我构建 pyadolc 时,构建脚本会尝试使用命令 -lboost_python。它失败了,因为 dll 被命名为 libboost_python-mgw46-mt-1_53.dll,而不是 libboost_python.dll。

所以我在 /mingw/bin 中将 dll 重命名为 libboost_python.dll。它工作正常,一切都很好。

但是,当我使用 python shell 时

导入 adolc

它给了我一个错误:ImportError: No dll found for _adolc(类似的东西)。然后发现是因为在找libboost_python-mgw46-mt-1_53.dll。

我的问题是:dll 命名是如何工作的?处理这种情况的正确方法是什么?我应该修改构建脚本还是应该重命名 dll?我知道在 linux 中,我可能可以创建一个 libboost_python.so 到 libboost_python-xxxx-mt-1_53.so 的符号链接。但是在 Windows xp 中,文件的符号链接并不是那么容易。

【问题讨论】:

标签: python windows mingw msys


【解决方案1】:

有关如何命名和查找 dll 的信息在这里:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586%28v=vs.85%29.aspx;如果您使用的是 Windows Vista 或更高版本,您可以创建符号链接,对于旧版本,您可以使用来自 sysinternals.com 的 junction

【讨论】:

    【解决方案2】:

    最好的办法是将构建脚本更改为指向-lboost_python-mgw46-mt-1_53.dll

    如果您重命名 libboost_python-mgw46-mt-1_53.dll,则必须将 libboost_python-mgw46-mt-1_53.dll.a 重命名为。

    经常有dll's相互引用,如果你现在,只重命名,原来的名字是找不到的。

    所以不要rename,而是使用copy

    复制

    libboost_python-mgw46-mt-1_53.dll.alibboost_python.a

    然后复制

    libboost_python-mgw46-mt-1_53.dlllibboost_python.dll

    使用此方法,您有两个版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 2011-12-19
      相关资源
      最近更新 更多