在cygwin中使用python.ctypes

在cygwin中使用python.ctypes,python,cygwin,ctypes,Python,Cygwin,Ctypes,我想在cygwin中使用python的(2.6.5)ctypes,但我不知道如何加载dll 我尝试了各种变体,比如 >>> form ctypes import * >>> cdll.LoadLibrary("/lib/libcairo.dll.a") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/pyt

我想在cygwin中使用python的(2.6.5)ctypes,但我不知道如何加载dll

我尝试了各种变体,比如

>>> form ctypes import *
>>> cdll.LoadLibrary("/lib/libcairo.dll.a")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/ctypes/__init__.py", line 431, in LoadLibrary
    return self._dlltype(name)
  File "/usr/lib/python2.6/ctypes/__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: Permission denied
>>表单ctypes导入*
>>>LoadLibrary(“/lib/libcairo.dll.a”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
LoadLibrary中的文件“/usr/lib/python2.6/ctypes/_init__uuu.py”,第431行
返回自我类型(名称)
文件“/usr/lib/python2.6/ctypes/_init__.py”,第353行,在_init中__
self.\u handle=\u dlopen(self.\u名称,模式)
操作错误:权限被拒绝

您将无法使用Python ctypes模块加载导入库;它必须是一个实际的DLL。我使用cygwin crypt库和crypt DLL导入库作为Win7上最新型号cygwin的示例


Python 2.6.5 (r265:79063, Jun 12 2010, 17:07:01)
[GCC 4.3.4 20090804 (release) 1] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from ctypes import *
>>> cdll.LoadLibrary('cygcrypt-0.dll')
<CDLL 'cygcrypt-0.dll', handle 380000 at 7ef4564c>
>>>
>>>
>>> cdll.LoadLibrary('libcrypt.dll.a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/ctypes/__init__.py", line 431, in LoadLibrary
    return self._dlltype(name)
  File "/usr/lib/python2.6/ctypes/__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: Permission denied

Python 2.6.5(r265:790632010年6月12日17:07:01)
[GCC 4.3.4 20090804(发布)1]关于cygwin
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>从ctypes导入*
>>>LoadLibrary('cygcrypt-0.dll')
>>>
>>>
>>>LoadLibrary('libcrypt.dll.a')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
LoadLibrary中的文件“/usr/lib/python2.6/ctypes/_init__uuu.py”,第431行
返回自我类型(名称)
文件“/usr/lib/python2.6/ctypes/_init__.py”,第353行,在_init中__
self.\u handle=\u dlopen(self.\u名称,模式)
操作错误:权限被拒绝

尝试更改dll上的权限(使用
sudo chmod
)…thx,我不知道cygwin如何处理dll内容。是否有一些神奇的功能,可以在所有平台上通过名称找到正确的库,例如“crypt”?不客气。我不知道是否有跨平台的方法来在运行时指定动态库。不久前,我在ParrotVM和SQLite上遇到了类似的问题。在Linux上,共享库是libsqlite3.so,但在Windows上是sqlite3.dll。虽然文件扩展名不必在Parrot中指定,但文件名仍然与“lib”不同,因此我的程序仍然需要条件语句来检查操作系统类型,以便跨平台加载共享库。Linux通过使用符号链接在某种程度上减轻了共享库的处理。