Error internal linkage but is not defined in JNI WebRTC

Viewed 21

I tried to compile WebRTC with my customized function, but I always get the error like this:

In file included from ../../sdk/android/src/jni/pc/octon_frame_encryptor.cc:5:
gen/sdk/android/generated_peerconnection_jni/OctonFrameEncryptor_jni.h:41:14: error: function 'webrtc::jni::JNI_OctonFrameEncryptor_GetOctonFrameEncryptor' has internal linkage but is not defined [-Werror,-Wundefined-internal]
static jlong JNI_OctonFrameEncryptor_GetOctonFrameEncryptor(JNIEnv* env, const
             ^
gen/sdk/android/generated_peerconnection_jni/OctonFrameEncryptor_jni.h:48:10: note: used here
  return JNI_OctonFrameEncryptor_GetOctonFrameEncryptor(env,
         ^
1 error generated.

I don't know what is wrong with my function, here is my octon_frame_encryptor.cc inside src/jni/pc. For JNI_OctonFrameEncryptor_SetKey it seems that it does not throw compiling error.

#include "api/crypto/octon_frame_encryptor.h"

#include <vector>

#include "sdk/android/generated_peerconnection_jni/OctonFrameEncryptor_jni.h"
#include "sdk/android/src/jni/jni_helpers.h"

namespace webrtc {
namespace jni {

static jlong JNI_OctonFrameEncryptor_GetOctonFrameEncryptor(
    JNIEnv* jni,
    const base::android::JavaParamRef<jobject>& thiz,
    const base::android::JavaParamRef<jintArray>& key_bytes) {
  jintArray key_bytes_array = key_bytes.obj();
  jsize size = jni->GetArrayLength(key_bytes_array);
  jint* key_bytes_ptr = jni->GetIntArrayElements(key_bytes_array, 0);
  std::vector<uint8_t> key_bytes_vector(key_bytes_ptr, key_bytes_ptr + size);
  return jlongFromPointer(new OctonFrameEncryptor(key_bytes_vector));
}

static void JNI_OctonFrameEncryptor_SetKey(
    JNIEnv* jni,
    const base::android::JavaParamRef<jobject>& thiz,
    const base::android::JavaParamRef<jintArray>& key_bytes) {
  jintArray key_bytes_array = key_bytes.obj();
  jsize size = jni->GetArrayLength(key_bytes_array);
  jint* key_bytes_ptr = jni->GetIntArrayElements(key_bytes_array, 0);
  std::vector<uint8_t> key_bytes_vector(key_bytes_ptr, key_bytes_ptr + size);

  OctonFrameEncryptor* encryptor =
      reinterpret_cast<OctonFrameEncryptor*>(thiz.obj());
  encryptor->SetKey(key_bytes_vector);
}

}  // namespace jni
}  // namespace webrtc
0 Answers
Related