我有一个 .dll 依赖于其他一些(日晷 ODE 求解器).dll。我使用 Windows 8.1 和 mingw 来编译和链接我用于 .dll 的 C 代码。当尝试使用Python和ctypes加载它们时,我收到一个弹出窗口,其中显示系统错误:找不到libsundials_cvode.dll,因为它在计算机上不存在
,当您关闭弹出窗口时,Python会输出WindowsError: [Error 126] Cannot find the module
无法理解为什么会这样,因为 gcc 编译和链接文件没有错误(是的,它们确实存在)...我什至尝试复制将依赖的 dll 复制到我的 python 脚本所在的目录中,但没有成功。
我运行以下编译和链接器命令,没有任何警告或错误
gcc -c -I c:\sundials\include cfile.c
gcc -shared -o clib.dll cfile.o -L. C:\sundials\instdir\lib\libsundials_cvode.dll -L. C:\sundials\instdir\lib\libsundials_nserial.dll
我的Python测试脚本给出上述错误是
import ctypes
lib = ctypes.cdll.LoadLibrary('clib.dll')
我是 gcc 和 c 的初学者,但对 Python 非常有经验。有什么建议可能是什么原因吗?
最佳答案
参见维基百科 Dynamic-link library :
“...除非您的 DLL 是组件对象模型 (COM) 服务器,否则 DLL 文件必须放置在 PATH 环境变量中列出的目录之一、默认系统目录或与使用它的程序相同的目录...”
因此,将 C:\sundials\instdir\lib
添加到您的 PATH 环境中。变量。
关于python - 使用 ctypes 加载 .dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31835213/