Встраивание Spidermonkey - segfault - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь встроить Spider Monkey в код C ++.Скачано https://ftp.mozilla.org/pub/spidermonkey/prereleases/60/pre3/mozjs-60.1.1pre3.tar.bz2

Скомпилировано как указано в INSTALL, ../configure --enable-debug --disable-optimize.Мой пример приложения выглядит следующим образом:

#include <iostream>
#include <stdexcept>
#include "jsapi.h"
#include "js/Initialization.h"

int main(int argc, char** args) {
    if (!JS_Init()) {
        throw std::runtime_error("failed to initialise.");  
    }

    std::cout << "It's alive!\n";

    JS_ShutDown();
    return 0;
}

Мой g ++ cmd выглядит следующим образом:

g++ -DDEBUG -I${HOME}/mozjs-60.1.1pre3/js/src/obj/dist/include -L${HOME}/mozjs-60.1.1pre3/js/src/obj/dist/bin/ main.cpp  -lmozjs-60 -lm -lz -ldl

После запуска (мне нужно было LD_PRELOAD для его запуска), я получаю мгновенный SIGSEGV,Это обратный след:

(gdb) bt
#0  0x0000000000000000 in ?? ()
#1  0x00007ffff5b9504a in js::Mutex::Mutex (
    this=0x7ffff7dcdbc0 <js::jit::CacheIRSpewer::cacheIRspewer>, id=...)
    at /home/m.radwanski/code/mozjs-60.1.1pre3-dynamic/mozjs-60.1.1pre3/js/src/threading/Mutex.h:57
#2  0x00007ffff5db9109 in js::jit::CacheIRSpewer::CacheIRSpewer (
    this=0x7ffff7dcdbc0 <js::jit::CacheIRSpewer::cacheIRspewer>)
    at /home/m.radwanski/code/mozjs-60.1.1pre3-dynamic/mozjs-60.1.1pre3/js/src/jit/CacheIRSpewer.cpp:34
#3  0x00007ffff5e29df0 in __static_initialization_and_destruction_0 (__initialize_p=1, 
    __priority=65535)
    at /home/m.radwanski/code/mozjs-60.1.1pre3-dynamic/mozjs-60.1.1pre3/js/src/jit/CacheIRSpewer.cpp:31
#4  0x00007ffff5e2f444 in _GLOBAL__sub_I_Unified_cpp_js_src13.cpp(void) ()
    at /home/m.radwanski/code/mozjs-60.1.1pre3-dynamic/mozjs-60.1.1pre3/js/src/jit/CompileWrappers.cpp:303
#5  0x00007ffff7de5733 in call_init (env=0x7fffffffdfc8, argv=0x7fffffffdfb8, argc=1, 
    l=<optimized out>) at dl-init.c:72
#6  _dl_init (main_map=0x7ffff7ffe170, argc=1, argv=0x7fffffffdfb8, env=0x7fffffffdfc8)
    at dl-init.c:119
#7  0x00007ffff7dd60ca in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
#8  0x0000000000000001 in ?? ()
#9  0x00007fffffffe2c8 in ?? ()
#10 0x0000000000000000 in ?? ()

Что я сделал не так?

...