2016-12-31 12 views
2

Android ndkはC++関数のオーバーロードをサポートしていますか?それがどうすればいいのですか?
私は純粋なC++コードを書いています。つまり、extern "C"の構文を使用したくありません。例えばAndroid ndkのC++関数オーバーロード

、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スタジオです。コードに何が問題なのですか?

+0

おそらく関連:https://developer.android.com/training/articles/perf-jni.html#faq_ULE –

+0

おそらく:http://stackoverflow.com/questions/4031281/what-is-the-correct- way-to-write-native-method-signatures-in-android-ndk –

+0

これはうまくいく、ありがとう。 –

答えて

0

Marrison Changのリンクは間違いありません。 __「引数署名続くメソッド名に付加。 『

底:理由は、』ネイティブメソッド名をオーバーロード、上記成分に加えて、余分な2つのアンダースコアを有するノート」here

を説明しますjavahを再実行し、生成するシグネチャを受け入れる必要があります。また、すでに動作しているクラスにオーバーロードを追加すると、メソッドのシグネチャが変更されることに注意してください。

関連する問題