Swig Python 不包装方法

2024-05-29 03:19:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用SWIG包装一个c文件,这个文件有一长串用户定义的include“*.h”文件。你知道吗

查看swig编译的*.py文件,某些*.h文件中包含的所有方法似乎都包含在包装代码中,而不同的*.h文件中没有任何方法。你知道吗

虽然文件在编译或安装时不会抛出错误,但在运行其中一个非包含的方法时,我遇到了一个分段错误(核心转储)。由于该方法没有出现在*.py文件中,我似乎无法使用gdb或pdb对其进行调试。你知道吗

gdb似乎确实跟踪了*.py文件中包含的包装方法。你知道吗

下面是rtserver.c文件中的include语句

#include "rtypes.h"
#include "option.h"

#include "tcpipmsg.h"

#include "dmap.h"
#include "rprm.h"
#include "fitdata.h"
#include "radar.h"
#include "rmsg.h"
#include "rmsgrcv.h"
#include "errlog.h"

#include "fitpacket.h"
#include "fork.h"

#include "errstr.h"
#include "hlpstr.h"

#include "version.h"

#include "rtserver.h"

rtserver.i文件

%module rtserver
%import "fitdata.i"

%{
#include <zlib.h>
#include "rtypes.h"
#include "option.h"

#include "tcpipmsg.h"

#include "dmap.h"
#include "rprm.h"
#include "fitdata.i"
#include "radar.h"
#include "rmsg.h"
#include "rmsgrcv.h"
#include "errlog.h"

#include "fitpacket.h"
#include "fork.h"

#include "version.h"
#include "rtserver.h"
%}

%include "rtypes.h"
%include "option.h"
%include "tcpipmsg.h"
%include "dmap.h"
%include "radar.h"
%include "rmsg.h"
%include "rmsgrcv.h"
%include "errlog.h"

%include "fitpacket.h"
%include "fork.h"
 %include "version.h"
 %include "rtserver.h"

以下是gcc共享声明:

gcc -shared -g rtserver_wrap.o connect.o fitpacket.o fork.o msgmem.o socket.o radar.o rmsgrcv.o rprm.o option.o fit.o dmap.o convert.o merge.o errlog.o time.o tcpipmsg.o printinfo.o fitwrite.o rtserver.o -o _rtserver.so 

在本例中,包括rmsgrcv.h和tcpipmsg.h中的方法,但不包括fit.h或rprm.h

这是一个来自rtserver.py文件其中一个已包装邮件的:

def RMsgRcvDecodeData(*args):
    return _rtserver.RMsgRcvDecodeData(*args)
RMsgRcvDecodeData = _rtserver.RMsgRcvDecodeData

Tags: 文件方法pyincludeforkoptionradardmap
1条回答
网友
1楼 · 发布于 2024-05-29 03:19:59

如果没有一个更简洁的示例来显示头文件的内容,很难说,但是您可能不知道的是,SWIG在默认情况下不会递归到头文件中。如果没有%include "fit.h",那么fit.h中的方法将不会被SWIG包装。你知道吗

相关问题 更多 >

    热门问题