我正在将ImageMagick库与Pythonctypes
一起使用。我编写了以下简单的代码,但在Mac中由于分段错误(KERN_INVALID_ADDRESS
)而崩溃:
from ctypes import *
from ctypes.util import find_library
lib = CDLL(find_library('MagickWand'))
lib.MagickWandGenesis()
wand = lib.NewMagickWand()
lib.MagickReadImage(wand, 'mona-lisa.jpg')
lib.DestroyMagickWand(wand)
lib.MagickWandTerminus()
它在Linux和Windows上都能很好地工作,但只在macosxlion上运行。我用各种方法构建了ImageMagick(官方二进制软件包、自制软件、传统的./configure && make
),但每次试用都会崩溃。在
不仅对于MagickReadImage()
函数,IsMagickWand()
函数也会崩溃。我只猜测NewMagickWand()
返回了错误的指针,或者Mac中的ctypes
错误地处理了指针,但我不确定。在
在这种情况下怎么了?在
我更改了以下代码:
收件人:
^{pr2}$所以,效果很好。在
很可能是32/64位问题。Mac版本是您测试过的唯一64位进程吗?或者,在Windows和Linux版本中,您很幸运,因为它们碰巧返回0x00000000xxxxxxxx形式的指针。在
NewMagickWand返回一个指针,但您没有告诉ctypes需要一个指针。ctypes默认返回值为32位整数。在调用NewMagickWand之前添加这一行。在
^{pr2}$这告诉ctypes NewMagickWand返回一个指针。在
相关问题 更多 >
编程相关推荐