SWIG重命名功能

时间:2012-10-29 11:39:31

标签: java java-native-interface swig

我在接口文件中使用以下代码来重命名全局函数free

%ignore free;
%rename(my_free) free;

但结果头文件我看不到任何free被重命名为my_free。我在做什么吗 错了吗?上面的行放在接口文件的顶部,分别表示第一行和第二行。我看到了here

1 个答案:

答案 0 :(得分:1)

您展示的示例似乎完全符合您的预期。例如:

%module test

%ignore free;
%rename(my_free) free;

// Function declaration:
void free();
// Or use %include if you prefer

运行:

swig -Wall -java test.i

生成test.java:

public class test {
  public static void my_free() {
    testJNI.my_free();
  }
}

所以它已按预期重命名。

实际上%ignore在这里完全是多余的,仅%rename就足以实现这一结果。顺序很重要 - %rename取代%ignore,两者都必须在free声明之前。

官方文档位于swig.org,我倾向于偏好其他网站。 (如果您是using SWIG 2.0 there's a lot of extra features for renaming too并且可以使用%rename忽略功能:%rename("$ignore") free;