我应该如何处理一个“不正确”命名的dll?

2024-06-26 13:25:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Mingw在Windows上编译一个autodiff python库pyadoc。它需要boostpython来调用底层的c++库adol-c

我首先用mingw编译了boostpython库(dll)。生成的dll被命名为libboost\ u python-mgw46-mt-1\ u 53.dll和libboost\ u python-mgw46-mt-1\ u 53.dll.a,分别位于/mingw/bin和/mingw/lib中。你知道吗

然后,当我构建pyadoc时,构建脚本会尝试使用命令-lboost\u python。它失败了,因为该dll名为libboost\u python-mgw46-mt-1\u 53.dll,而不是libboost_python.dll. 你知道吗

所以我把dll重命名为libboost_python.dll在/mingw/bin。一切正常。你知道吗

然而,当我在pythonshell中进行tred时

导入adolc

它给了我一个错误:importorror:没有找到\u adolc的dll(类似的东西)。然后我发现这是因为它在寻找libboost\u python-mgw46-mt-1\u 53.dll。你知道吗

我的问题是:dll命名是如何工作的?处理这种情况的正确方法是什么?我应该修改构建脚本还是重命名dll?我知道在linux中,我可能只需要创建libboost的一个符号链接_Python.so发送到libboost\u python-xxxx-mt-1\u 53.so。但在WindowsXP中,指向文件的符号链接并不是那么容易。你知道吗


Tags: 脚本binso链接符号命名重命名dll
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

使用这种方法,两个版本都有。你知道吗

有关如何命名和找到DLL的信息,请参见:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586%28v=vs.85%29.aspx;如果您使用的是Windows Vista或更高版本,则可以创建符号链接,对于较旧版本,则可以使用junction fromsysinternals.com网站你知道吗

相关问题 更多 >