![](/img/trans.png)
[英]Calling function from .so file created in android in linux C++ code
[英]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.