使用ctypes在printf中进行分段错误

时间:2017-11-19 00:38:49

标签: python c python-2.7 segmentation-fault ctypes

我正在尝试将一些python脚本连接到C函数,以提高与python代码相关的性能。 我找到了ctypes模块,它适用于一些简单的例子,但如果我在被调用的C函数中使用malloc或printf,它总是产生“分段错误”。 我创建了一个最小的示例代码,导致我的机器出现问题:

foo.c:

#include<stdio.h>

void foo(){
    printf("Hello World!");
}

foo.py:

import ctypes

c_foo = ctypes.CDLL('foo.dll')
c_foo.foo.argtypes = []
c_foo.foo.restype = None

c_foo.foo()

我仍然希望这只是我的一个愚蠢的错误,但我现在几个小时都找不到问题。 如果它有帮助,我在64位机器上使用Windows,anaconda分配python 2.7.13。我用来编译C-File的命令是:“gcc -shared -fPIC -o foo.dll foo.c”(适用于简单的例子)。 谢谢你的时间。

编辑: 我发现了另一种(可能)奇怪的行为。直到现在我才尝试在cygwin中运行python脚本。今天我尝试使用Windows控制台(cmd.exe)并且很惊讶(并且很高兴)没有发生“分段错误”,但不幸的是脚本停在与以前完全相同的位置而没有显示任何错误。 另一件事,下面的代码工作正常,所以pritnf一般似乎不是问题:

from ctypes import *
libc = cdll.msvcrt
libc.printf("Hello")

0 个答案:

没有答案