当我使用PythoncTypes调用rs232.c时,如何解决分段错误问题?

当我使用PythoncTypes调用rs232.c时,如何解决分段错误问题?,python,c,segmentation-fault,ctypes,Python,C,Segmentation Fault,Ctypes,我将rs232.c构建为一个共享库,并尝试使用python3调用它。但是我在尝试获取com端口tcgetattr()的属性时遇到了“分段错误”。有人知道这是什么问题吗? 我的操作系统是raspberry pi p3 testcom.py 从ctypes导入* comdll=cdll.LoadLibrary(“rs232.so”) comdll.RS232_OpenComport(c_int(22)、c_int(115200)、c_char_p(b'8N1')) rs232.c #包括 #包括

我将rs232.c构建为一个共享库,并尝试使用python3调用它。但是我在尝试获取com端口tcgetattr()的属性时遇到了“分段错误”。有人知道这是什么问题吗? 我的操作系统是raspberry pi p3

testcom.py

从ctypes导入*
comdll=cdll.LoadLibrary(“rs232.so”)
comdll.RS232_OpenComport(c_int(22)、c_int(115200)、c_char_p(b'8N1'))
rs232.c

#包括
#包括
#定义RS232_端口号39
int Cport[RS232_端口号],错误;
结构termios旧端口设置[RS232\U端口号];
int RS232_OpenComport(int comport_编号、int波特率、常量字符*模式)
{
error=tcgetattr(Cport[comport\u number],old\u port\u settings+comport\u number);//此行出现分段错误
返回误差;
}

问题在于您将变量命名为
error
,并将其设置为全局变量。作为GNU扩展,您的库最终会混淆两者,并试图在名为
error
的函数上写入
tcgetattr
的返回值。若要修复它,请将
error
重命名为其他名称,将其声明为
static
,或将其声明移动到
RS232\u OpenComport

中。您的评论很有用!谢谢