【问题标题】:C++ function overloading in Android ndkAndroid ndk 中的 C++ 函数重载
【发布时间】:2016-12-31 03:06:28
【问题描述】:

Android ndk 是否支持 c++ 函数重载?如果有,该怎么做?
我想编写纯 c++ 代码,即我不喜欢使用 extern "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);

但是如果我在设备上运行上面的代码,我会收到错误:No implementation found for void com.mathlib.Math.add(float[], float[], float[]).

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

【问题讨论】:

标签: android android-ndk java-native-interface


【解决方案1】:

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

"注意:重载的原生方法名,除了上述组件外,在方法名后面还有一个额外的两个下划线"__",后跟参数签名。"

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 2011-02-10
    • 2012-05-21
    相关资源
    最近更新 更多