gpt4 book ai didi

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

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

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

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