我该如何处理“错误”命名的dll?

时间:2013-04-22 17:55:56

标签: python windows mingw msys

我正在尝试使用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:找不到_adolc的dll(类似的东西)。然后我发现这是因为它正在寻找libboost_python-mgw46-mt-1_53.dll。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

最好的可能是将构建脚本更改为指向-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

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