gpt4 book ai didi

python - Swig Python 不包装方法

转载 作者:行者123 更新时间:2023-11-30 17:19:38 25 4
gpt4 key购买 nike

我正在尝试用 SWIG 包装一个 c 文件,该文件具有一长串用户定义的包含“*.h”文件。

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

虽然文件在编译或设置时不会抛出错误,但在运行其中一种非包含方法时出现段错误(核心转储)。由于该方法没有出现在 *.py 文件中,我似乎无法使用 gdb 或 pdb 对其进行调试。

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

这是 rtserver.c 文件中的包含语句

#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

最佳答案

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

关于python - Swig Python 不包装方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28845459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com