我有一个 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/