Swig C to Python ImportError: undefined symbol

Swig C to Python ImportError: undefined symbol

我目前正致力于在 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 

多亏了上面的评论,我才能够找出问题所在。

原来我编译的代码不正确。

下面是正确的编译方法,在本例中(运行 每行单独):

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