Swig C to Python ImportError:未定义的符号

时间:2015-01-13 18:43:59

标签: python c++ c swig

我目前正在Swig中包装部分服务器代码,解码和解析方法,以便在项目所需的python服务器代码中使用这些方法。

我正在尝试将下面的方法包装在Swig中并继续收到错误ImportError:./_ 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 

1 个答案:

答案 0 :(得分:1)

感谢上面的评论,我能够找出问题所在。

事实证明我正在编译错误的代码。

这是编译它的正确方法,在这个例子中(单独运行每一行):

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