python - Swig C 模块的子集,同时忽略具有其他依赖项的模块的其余部分

标签 python c swig

我有一个 my.c 文件,它定义了函数“foo”和“bar”,其中“foo”本身是独立的,“bar”调用其他函数,例如“gee”,在一堆其他文件中定义我不想被灌醉。

现在我想使用 Swig 来包装 my.c 中的“foo”,而不涉及其他文件或函数。我为 foo 定义了一个 swig 接口(interface):

%module sample                                                                                       
%{                                                         
/* Put headers and other declarations here */                                                       
extern float    foo();                                            
%}                                                                                                             
extern float    foo();

我能够构建 _my.so 库,但是当我尝试从 python 调用“foo”时,它说:

导入错误:_my.so: undefined symbol :“gee”。

如果我从 my.c 中删除“bar”的定义,整个事情就会起作用。

有没有办法告诉 swig 忽略“bar”和“gee”?我什至尝试添加“%ignore bar;”和“%忽略天啊;”在界面中,但他们没有解决问题。

谢谢!

最佳答案

您可以在 my.c 文件中使用条件编译:

foo() {
   // foo stuff
}
#if !defined(COMPILING_FOR_SWIG)
bar() {
   gee();
}
#endif

然后,当您构建 my.c 时,请确保将编译器设置更新为 #define COMPILING_FOR_SWIG,例如通常添加编译器选项-DCOMPILING_FOR_SWIG。这将确保编译器忽略 bar() 函数。

(请注意,COMPILING_FOR_SWIG 是一个完全任意的名称,可以更改为您选择的其他名称)

关于python - Swig C 模块的子集,同时忽略具有其他依赖项的模块的其余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31297859/

相关文章:

c - 通过引用传递空数组并在函数内初始化它

c++ - 使用 SWIG (AIX 5.1) 从 Perl 调用 C++ 库时崩溃

python - 在 SWIG 中处理结构数组

python - 使用python发送电子邮件: how to form the message?

python - Pygame def 函数

python - sklearn - 如何获得概率而不是标签?

c - 取消引用指向结构成员的不完整类型错误的指针

c - Linux mremap 没有释放旧映射?

python - wxPython中透明笔记本页面/设置笔记本页面背景图片

Java/C++ SWIG - 使用数组参数调用函数