繁体   English   中英

从Android中的C文件调用C ++函数

[英]Calling C++ function from a C file in Android

我正在使用C / C ++在Android中进行开发。 我有一个C ++函数,需要从C文件中调用。 这是我目前正在执行的操作,但出现错误

未定义对__check_expiry引用

C ++函数在“ ah”中定义,并在“ a.cpp”中实现。 我在“ bc”文件中包含“ ah”,并从“ bc”文件中调用方法“ __check_expiry ”。

啊:

#ifdef __cplusplus
extern "C" {
#endif

static int __check_expiry(void);

#ifdef __cplusplus
} 
#endif

a.cpp:

extern "C" {

static int __check_expiry() {

    vz::lock_guard<std::mutex> guard(mutex_check, lock_hooker_check);

    JNIEnv *env = NULL;
    static bool __is_attached_1 = false;

    if ((env = __getEnv(&__is_attached_1)) == NULL) {
        //log_info("getEnv fail\r\n");
    }
    assert(!__is_attached_1);

    int obj = env->CallStaticIntMethod((jclass) g_class, g_methodID);
    log_info("Returned value from JAVA %d", obj);

    __releaseEnv(__is_attached_1);

    guard.~lock_guard();

    return obj;
}

}

公元前:

#ifdef __cplusplus
extern "C" {
#endif

#include "a.h"

#ifdef __cplusplus
}
#endif

static int tunnel_to()
{
    int value = __check_expiry();
}

静态函数不会导出。 删除static限定符。

(不相关:只要您在a.cpp中#include "ah" extern "C" ,您的源文件中就不需要extern "C" 。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM