ImageMagick + Python ctypes的分段错误

2024-10-01 04:53:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将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),但每次试用都会崩溃。在

^{pr2}$

不仅对于MagickReadImage()函数,IsMagickWand()函数也会崩溃。我只猜测NewMagickWand()返回了错误的指针,或者Mac中的ctypes错误地处理了指针,但我不确定。在

在这种情况下怎么了?在


Tags: 函数fromimportmaclib错误librarywand
2条回答

我更改了以下代码:

lib.MagickReadImage(wand, 'mona-lisa.jpg')

收件人:

^{pr2}$

所以,效果很好。在

很可能是32/64位问题。Mac版本是您测试过的唯一64位进程吗?或者,在Windows和Linux版本中,您很幸运,因为它们碰巧返回0x00000000xxxxxxxx形式的指针。在

wand = lib.NewMagickWand()

NewMagickWand返回一个指针,但您没有告诉ctypes需要一个指针。ctypes默认返回值为32位整数。在调用NewMagickWand之前添加这一行。在

^{pr2}$

这告诉ctypes NewMagickWand返回一个指针。在

相关问题 更多 >