java - SWIG 重命名函数

标签 java java-native-interface swig

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

%ignore free;
%rename(my_free) free;

但是生成的头文件我没有看到任何 free 被重命名为 my_free。我有在做什么吗 这里错了?上述行位于接口(interface)文件的顶部,分别表示第一行和第二行。我看到了这个here .

最佳答案

您展示的示例似乎完全按照您的预期工作。例如给出:

%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;)

关于java - SWIG 重命名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13120906/

相关文章:

Python:AttributeError: 'module' 对象没有属性

java - 不满意链接错误: Native method not found (NOT caused by the common cause for this error)

python - 我应该如何对 SWIG 生成的 python 包装器进行单元测试

python - FANN Python 绑定(bind)失败

Java SWT 创建监听器来更改标签文本并返回数据

java - 在 java 类上生成 C++ 包装器的工具

java - "GetObjectClass"方法和"FindClass"方法区别及用法

java - 启用换行符时,扫描仪的缓冲区不代表整个文件

java - [spring] DefaultShutdownStrategy、[camel] ShutdownAware 和 [camel] 处理器的组合不起作用

java - 使用 PDFBox 获取 pdf 中图像的显示大小