Swig C到Python:未定义的符号

Swig 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

我目前正在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.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