2016-12-31 119 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並接受它生成的簽名,並且還要注意,如果向已在工作的類中添加重載,方法簽名將會更改。