我想使用swig来从Java调用C函数。 我读: SWIG Tutorial
Web包含接口文件示例:
/* example.i */
%module example
%{
/* Put header files here or function declarations like below */
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
%}
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
为什么函数声明中存在重复? (例如“extern int fact(int n);”在{%%}和文件底部声明?
答案 0 :(得分:2)
%{%}块中的内容被精确复制到生成的c文件(example_wrap.c)中以用作前向原型。块外的东西用于生成生成的.c文件中的函数。
一个更好的例子假设你已经有一个类似于example.h的头文件:
extern void functionIwantToCallFromJava(int);
extern crazyType *functionIDoNotCareAbout(anotherCrazyType *);
所以在example.i中你有
%{
#include "example.h"
%}
extern void functionIwantToCallFromJava(int);
现在生成的文件将包含#include" example.h"接近开头所需的功能,以便functionIwantToCallFromJava正确原型化, 但SWIG并不需要生成大量代码来实现functionIDoNotCareAbout,即使它是在同一个头文件中定义的。