【问题标题】:Swig C to Python ImportError: undefined symbolSwig C to Python ImportError:未定义的符号
【发布时间】:2015-01-13 18:43:59
【问题描述】:

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

【问题讨论】:

  • 在构建rmsgrcv Python 扩展时,是否链接了包含TCPMsgRecv 函数的.so 文件?

标签: python c++ c swig


【解决方案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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 2018-02-24
    相关资源
    最近更新 更多