我在Android中使用SWIG將一串C++代碼轉換成java。我有一個函數可以讀取文件中的數據,另一個函數將讀取數據並處理它。兩者都使用SWIGs std_vector.i適用於一個文件,但不是兩個
vector<complex<float> >
的問題是,建設能把我下面的錯誤
[javac] do_something_with_data.work(return_data.read(num_samps));
[javac] ^
[javac] required: SWIGTYPE_p_vectorT_complexT_float_t_t
[javac] found: vector_complex_float
[javac] reason: actual argument vector_complex_float cannot be converted to SWIGTYPE_p_vectorT_complexT_float_t_t by method invocation conversion
[javac] 1 error
我覺得有趣的是它的工作原理爲一體,而不是其他。我究竟做錯了什麼?
這裏有。我的文件
/* turn this module into java using SWIG */
%module do_something_with_data
%{
#include <vector>
#include <complex>
#include "do_something_with_data.hh"
%}
/* Let's just grab the original header file here */
%include "std_vector.i"
namespace std {
%template(vector_complex_float) vector<complex<float> >;
}
/* boilerplate code */
%pragma(java) jniclasscode=%{
static {
try {
java.lang.System.loadLibrary("do_something_with_data");
} catch (UnsatisfiedLinkError e) {
java.lang.System.err.println("Native code library failed to import");
java.lang.System.exit(1);
}
}
%}
%include "do_something_with_data.hh"
,我編譯使用下面的腳本
swig -c++ -java -package do_something_with_data -outdir src/do_something_with_data -o jni/do_something_with_data/do_something_with_data.cc jni/do_something_with_data/do_something_with_data.i
swig -c++ -java -package return_data -outdir src/return_data -o jni/return_data/return_data_wrap.cc jni/return_data/return_data.i
我知道我已經給
/* turn this module into java using SWIG */
%module return_data
%{
#include <vector>
#include <complex>
#include "return_data.hh"
%}
/* Let's just grab the original header file here */
%include "std_vector.i"
namespace std {
%template(vector_complex_float) vector<complex<float> >;
}
/* boilerplate code */
%pragma(java) jniclasscode=%{
static {
try {
java.lang.System.loadLibrary("return_data");
} catch (UnsatisfiedLinkError e) {
java.lang.System.err.println("Native code library failed to import");
java.lang.System.exit(1);
}
}
%}
%include "return_data.hh"
兩個其他.i文件很多代碼,但對我來說添加函數的定義也很重要。這些位於類聲明中的.hh文件中。
int32 work(vector<complex<float> > &input_items);
和
vector<complex<float> > read(int num_samps);
預先感謝您的幫助。
感謝您的回覆。儘管這回答了部分問題,但我不確定它是否回答了其他部分。爲什麼一個軟件包按我期望的方式工作,另一個忽略模板信息? – jrk0414
@ jrk0414修正了一個錯誤(只有一個文件包含另一個文件),並刪除重新定義(我懷疑它是問題,但值得一試)。 – Schollii