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