用ctypes加载.dll

时间:2015-08-05 14:21:25

标签: python c gcc dll linker

我有一个.dll与其他一些(Sundials ODE解算器).dll的依赖关系。我使用windows 8.1 with mingw来编译和链接我用于我的.dll的c代码。当尝试使用Python和ctypes加载它时,我得到一个带有System error: cannot find libsundials_cvode.dll since it does not exist on the computer的弹出窗口,当你关闭弹出窗口时,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非常有经验。有什么建议可能是什么原因?

1 个答案:

答案 0 :(得分:0)

参见维基百科Dynamic-link library

“...除非您的DLL是组件对象模型(COM)服务器,否则DLL文件必须放在PATH环境变量,默认系统目录或与使用它的程序相同的目录...“

因此,将C:\sundials\instdir\lib添加到您的PATH环境中。变量