我在Windows XP上通过IDLE GUI使用Python 2.7.3,我正试图通过Python API在本地运行Z3 4.0。
这条线很好用:
>>> from z3 import *
这一行没有:
>>> x = Int('x')
Traceback (most recent call last):
[...]
File "C:\Program Files\Microsoft Research\Z3-4.0\python\z3core.py", line 34, in init
_lib = ctypes.CDLL(PATH)
File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__
self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found
任何人都知道问题可能是什么?
我的PYTHONPATH设置为“C:\ Program Files \ Microsoft Research \ Z3-4.0 \ python”,没有引号。
答案 0 :(得分:1)
Z3使用线程本地存储。它是使用__declspec(thread)实现的。不幸的是,Windows XP和Server 2003中的DLL不支持此功能。从MSN文档:
"对于在进程启动后以动态方式加载的DLL(延迟加载,COM对象,显式LoadLibrary等),__ declspec(thread)在Windows XP,2003 Server和早期操作系统上不起作用,但确实有效在Vista和2008 Server上。"
因此,要使用Z3 DLL,您必须使用以下Windows之一:8,7,Vista或Server 2008。
答案 1 :(得分:0)
在Windows XP上,文件名中可能存在空格问题,导致python无法找到z3.dll;这似乎是一个普遍的python问题,例如: some notes on PYTHONPATH
如果使用旧的8.3格式的目录,它可能会起作用。您可以通过在命令shell中找到Z3目录找到短名称(我使用dir / x查看Windows 7上的短名称),在我的系统上,短路径为C:\ progra~1 \ mi4430~1 \ z3 -4.0 \ bin中。这些数字在每次安装时都有所不同。
更快的解决方案可能是简单地将bin目录中的z3.dll复制到python目录(如果你使用的是64位,则从x64目录复制)。