“致命信号11(SIGSEGV)位于0xdeadbaad”,JNI从java调用到.so

时间:2014-06-27 08:26:34

标签: java-native-interface

我使用自己的.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不能。

0 个答案:

没有答案