0

我正在尝试使用 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 中,文件的符号链接并不是那么容易。

4

2 回答 2

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

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

于 2013-05-10T15:08:07.310 回答
0

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

于 2013-04-22T21:09:19.180 回答