未找到实现

No implementation found

本文关键字:实现      更新时间:2023-10-16

我有一个Android应用程序需要引用和使用一些本机C++代码。 我是一个经验丰富的Java开发人员,但我缺乏C++。 我正在努力让它运行。 我收到下面的错误。 如果我在 loadLibrary 中更改名称,它会立即崩溃,所以我假设加载工作正常。 我该如何解决这个问题?

No implementation found for boolean com.example.myapplication.BamBridge.test() (tried Java_com_example_myapplication_BamBridge_test and Java_com_example_myapplication_BamBridge_test__)

public class BamBridge implements IBamBridge {
    static {
        System.loadLibrary("native-lib");
    }
    private native boolean test();
}

砰:

#ifndef BAM_H
#define BAM_H
#define JNIIMPORT
#define JNIEXPORT  __attribute__ ((visibility ("default")))
#define JNICALL
#include <set>
#include <vector>
#include <string>

extern "C" JNIEXPORT JNICALL bool test();
#endif

砰.cpp砰��

#include <cstdio>
#include <stdint.h>
#include <iostream>
#include <map>
#include "BAM.h"
#define SWAP_UINT16(val)  ((val << 8) | (val >> 8))



JNIEXPORT JNICALL    bool test()
{
     return true;
}

CMakeList.txt

cmake_minimum_required(VERSION 3.6.0)

add_library( # Specifies the name of the library.
             native-lib
             # Sets the library as a shared library.
             SHARED
             # Provides a relative path to your source file(s).
             src/main/cpp/BAM.cpp )

在 C 端将函数名称更改为

Java_com_example_myapplication_BamBridge_test

当 java 以特定格式搜索函数时。

在头文件中:

extern "C" 
{
    JNIEXPORT jboolean JNICALL Java_com_example_myapplication_BamBridge_test(JNIEnv *, jobject);
}

在您的 CPP 文件中:

extern "C"
{
    jboolean Java_com_example_myapplication_BamBridge_test(JNIEnv * env, jobject this)
    {
        return true;
    }
}