我正在尝试将一些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")