我正在尝试使用SWIG重命名将自动生成的代理Java类的名称test_cache_t.java更改为Example.java。我已经尝试了下面的内容,因为它适用于this question的C结构,但它不适用于C枚举。有任何想法吗?我收到的一些警告并没有引起我的注意......
%module Example
%rename (Example) test_cache_t_;
typedef enum test_cache_t_ {
CACHE_FALSE = 0,
CACHE_TRUE = 1
} test_cache_t;
%{
#include "Example.h"
%}
%include "Example.h"
[exec] /test/include/Example.h:84: Warning 302: Identifier 'test_cache_t' redefined (ignored) (Renamed from 'test_cache_t_'),
[exec] test.i:7: Warning 302: previous definition of 'test_cache_t' (Renamed from 'test_cache_t_').
[exec] /test/include/Example.h:82: Warning 302: Identifier 'CACHE_FALSE' redefined (ignored),
[exec] test.i:5: Warning 302: previous definition of 'CACHE_FALSE'.
[exec] /test/include/Example.h:84: Warning 302: Identifier 'CACHE_TRUE' redefined (ignored),
[exec] test.i:7: Warning 302: previous definition of 'CACHE_TRUE'.
答案 0 :(得分:1)
我认为你有两个问题:
您的模块与您的(%rename
d)类型具有相同的名称,因此您有两件事想要成为Example.java。
解决方案:从%rename
看起来您已经为SWIG提供了相同enum
的两个定义,一次在接口文件中,一次在头文件中。
解决方案:可能会从接口文件中删除typedef enum test_cache_t_
,或者在%ignore
之前使用%include
,或者完全删除%include
。
我的最终界面文件在测试结束时看起来像:
%module SomeOtherName
%{
#include "Example.h"
%}
%rename (Example) test_cache_t;
%include "Example.h"
奇怪的是,为了实现这一点,我必须使用typedef
中的%rename
'名称,而不是enum
名称。我不太确定为什么这似乎与struct
/ class
的情况相反。