2016-12-31 169 views
2

Android ndk支持C++函数重载吗?如果是这样,该怎么做?
我想写纯C++代码,即我不喜欢使用extern "C"语法。Android中的C++函数重载ndk

例如,C++代码:

void Java_com_mathlib_Math_add(JNIEnv *env, jobject, jintArray a, jintArray b, jintArray c) { 
    ... 
} 
void Java_com_mathlib_Math_add(JNIEnv *env, jobject, jfloatArray a, jfloatArray b, jfloatArray c) { 
    ... 
} 

java代码:

public class Math { 

    public native void add(int[] a, int[] b, int[] c); 
    public native void add(float[] a, float[] b, float[] c); 
} 

而且我用的是原生实现在Java代码中是这样的:

float[] a = {0}; 
float[] b = {1}; 
float[] c = new float[1]; 

new Math().add(a, b, c); 

但如果我在设备上运行上面的代码,出现错误:找不到void com.mathlib.Math.ad的实现d(float [],float [],float [])

IDE是Android Studio。那么代码有什么问题?

+0

可能相关:https://developer.android.com/training/articles/perf-jni.html#faq_ULE –

+0

也许:http://stackoverflow.com/questions/4031281/what-is-the-correct-写作本地方法签名的方式 - 在 - android-ndk –

+0

这有效,谢谢。 –

回答

0

Marrison Chang的链接是正确的。究其原因,解释here

“注:重载本地方法的名称,除上述成分外,有一个额外的两个下划线‘__’,附加到方法名称,后面加上参数签名”

底部行是,您需要重新运行javah并接受它生成的签名,并且还要注意,如果向已在工作的类中添加重载,方法签名将会更改。