我正在使用C / C ++在Android上进行开发。我有一个C ++函数,需要从C文件中调用。这就是我现在正在做的事情,但我得到了错误
对
的未定义引用__check_expiry
C ++函数在“a.h”中定义,并在“a.cpp”中实现。我在“b.c”文件中包含“a.h”并从“b.c”文件中调用方法“__check_expiry
”。
a.h:
#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;
}
}
b.c:
#ifdef __cplusplus
extern "C" {
#endif
#include "a.h"
#ifdef __cplusplus
}
#endif
static int tunnel_to()
{
int value = __check_expiry();
}
答案 0 :(得分:2)
不导出静态函数。删除static
限定符。
(不相关:只要您来自a.cpp #include "a.h"
,您就不需要源文件中的extern "C"
。)