我在从python调用一个共享的c库时遇到了问题。库加载正常,3个公开的函数中有一个是可调用的,并且可以按预期工作;但是,当向库中添加另一个函数时,我发现其他两个函数无法工作。发生的情况是python挂起了实际的函数调用,并在什么也不做的情况下旋转。python端和c端都有详细的日志记录,我可以断定库中的函数甚至没有启动,因为没有编写调试文件。
下面是有问题的代码的一小段:
下面是失败的c代码示例函数:
int genTest(char* filePath)
{
infoPrint(filePath, 2);
return EXIT_SUCCESS;
}这是我用来调用它的python:
import ctypes as C
lg.create_log_entry('loading dll... from ' + str(lib_path) + str(lib_name))
myclib = C.CDLL(lib_path + lib_name)
lg.create_log_entry('loaded')
genTest = myclib.genTest
genTest.argtypes = [C.c_char_p]
genTest.restype = C.c_int
lg.create_log_entry('test start')
res = genTest(C.c_char_p(str(source_as_image)))
certirxlogging.create_log_entry('test successful')这段代码开始编写“test start”,然后挂起。正如我所说的,这在python代码中库中其他地方的另一个函数上工作得很好,并且python没有抛给我任何错误,所以我无法调试任何东西。有什么想法吗?
发布于 2013-01-17 00:07:38
所以,我找到了它失败的原因。在对infoPrint函数的调用中有一些东西抛出了一个段错误。
导致我的程序挂起的原因是我正在使用python的多处理库在一个单独的进程中运行这个函数,并通过管道与它通信。父进程正在使用超时轮询管道,以获取由于突然崩溃而从未出现的返回值。
感谢你帮助我克服了这个小小的障碍,现在我可以(希望)找出c代码的问题所在。
https://stackoverflow.com/questions/14347433
复制相似问题