我使用自己的.so库来构建Android应用程序。昨晚很顺利。但它出现了这个错误:** A / libc:0xdeadbaad(代码= 1)的致命信号11(SIGSEGV)**今天早上调试它时。这是我的.so代码:
config_t config_obj_ptr = NULL;
module_t module_ptr = NULL;
int module_interface_init(const char * path)
{
LOGD("==========wrapper init==========\n");
if(path == NULL)
{
LOGD("path is not available");
return -1;
}
const char * app_path = path;
const char * cache_path = app_path;
config_obj_ptr = lib_create_config();
LOGD("Mark===1!\n");
if(NULL == config_obj_ptr)
{
LOGD("create config object err!\n");
getchar();
return -1;
}
set_app_path(config_obj_ptr, app_path);
set_cache_path(config_obj_ptr, cache_path);
LOGD("Mark===2!\n");
module_ptr = create_module(config_obj_ptr);
LOGD("Mark===3!\n");
if(NULL == p2p_module_ptr)
{
LOGD("create p2p module err!");
getchar();
return -1;
}
return 0;
}
我在java中通过JNI调用此方法:
private wrapper(String path)
{
nInit(path);
}
我发现崩溃发生在这个函数中(来自我的.so):我可以登录" Mark === 2!",no" Mark === 3!& #34 ;.所以它必须是 module_ptr = create_module(config_obj_ptr); 导致此问题。 config_obj_ptr和module_ptr都是在函数外声明的全局变量。 config_obj_ptr可以正常工作但module_ptr不能。