Swig C到Python:未定义的符号
我目前正在Swig中包装服务器代码的一部分,解码和解析方法,以便在项目所需的python服务器代码中使用这些方法 我试图将下面的方法包装在Swig中,并不断得到错误ImportError:../\u rmsgrcv.so:undefined symbol:TCPMsgRecv rmsgrcv.iSwig C到Python:未定义的符号,python,c++,c,swig,Python,C++,C,Swig,我目前正在Swig中包装服务器代码的一部分,解码和解析方法,以便在项目所需的python服务器代码中使用这些方法 我试图将下面的方法包装在Swig中,并不断得到错误ImportError:../\u rmsgrcv.so:undefined symbol:TCPMsgRecv rmsgrcv.i %module rmsgrcv %include "rtypes.i" %include "rmsg.i" %include "tcpmsg.i" %{ #include "rmsgrcv
%module rmsgrcv
%include "rtypes.i"
%include "rmsg.i"
%include "tcpmsg.i"
%{
#include "rmsgrcv.h"
%}
typedef unsigned int size_t;
char RMsgRcvParseData(int sock,struct RMsgBlock *blk,
unsigned char **store);
位于tcpmsg.i中的方法TCPMsgRecv在RMsgRcvParseData中被多次调用,以创建变量RMsgBlock*blk和unsigned char**store
下面是我编译代码的当前方式
swig -python rmsgrcv.i
$ gcc -O2 -fPIC -c rmsgrcv.c
$ gcc -O2 -fPIC -c rmsgrcv_wrap.c -I/usr/include/python2.7/
$ gcc -shared rmsgrcv.o rmsgrcv_wrap.o -o _rmsgrcv.so
多亏了上面的评论,我才知道出了什么问题 结果证明我编译的代码不正确 在本例中,以下是编译它的正确方法(分别运行每一行):
当您构建
rmsgrcv
Python扩展时,您是否链接了包含TCPMsgRecv
函数的.so文件?
swig -python rmsgrcv.i
gcc -O2 -fPIC -c rmsgrcv.c
gcc -O2 -fPIC -c tcpmsg.c
gcc -O2 -fPIC -c rmsgrcv_wrap.c -I/usr/include/python2.7/
gcc -shared rmsgrcv.o rmsgrcv_wrap.o tcpmsg.o -o _rmsgrcv.so