嵌入SpiderMonkey JS

问题描述:

我正在研究C++应用程序。我想在应用程序中嵌入SpiderMonkey。嵌入SpiderMonkey JS

我正在与CMake合作,但我无法获得该构建。所以,为了减少并发症,我尝试了这个page上的示例代码。这不会在命令行中使用cmake或gcc链接。

因此,更简单,只是为了确保我可以正确链接我试图让以下工作。 从用gcc命令行:

g++ --std=c++11 
    -I/home/thetasinner/moz/js/src/build_DBG.OBJ/dist/include  
    -L/home/thetasinner/moz/js/src/build_DBG.OBJ/js/src -DDEBUG 
    -Wl,--verbose -lmozjs-54a1 -lm -lz -ldl test.cpp -o test 

在下面的最小代码例如:

#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; 
} 

即使这没有链接。我得到的错误

/tmp/ccqjx5RY.o: In function `main': 
    custom.cpp:(.text+0xf2): undefined reference to `JS_ShutDown()' 
/tmp/ccqjx5RY.o: In function `JS_Init()': 
    custom.cpp:(.text._Z7JS_Initv[_Z7JS_Initv]+0xa): undefined reference to 
     'JS::detail::InitWithFailureDiagnostic(bool)' 
collect2: error: ld returned 1 exit status 

标题是发现和连接器是找到mozjs库

attempt to open /home/thetasinner/moz/js/src/custom_build_DBG.OBJ/js/src 
    /libmozjs-54a1.so succeeded 
-lmozjs-54a1 (/home/thetasinner/moz/js/src/custom_build_DBG.OBJ/js/src 
    /libmozjs-54a1.so) 

我的工作在Linux(Ubuntu的16.04和Debian 8.7试过),因为那是构建工具。我甚至不想触摸Window的。

构建在spidermonkey构建中的'js'可执行文件正常工作,我假设它有我试图链接它的lib。所以我会认为lib本身是可以构建的。

任何人都可以帮我解决这些链接器错误吗?关于SpiderMonkey的旧版本的问题有很多答案,但对于更新的版本没有什么。我对版本45(我已经尝试过非常类似的错误)或最新版本52感兴趣。 我很熟悉在代码中挖掘一下如何在构建时如何执行我想要的操作,因此对未正确记录的最新版本的兴趣,我完全被建筑步骤所困扰。

我怀疑它只是在命令行上一个顺序的问题:

g++ --std=c++11 
-I/home/thetasinner/moz/js/src/build_DBG.OBJ/dist/include  
-L/home/thetasinner/moz/js/src/build_DBG.OBJ/js/src -DDEBUG 
test.cpp -o test 
-Wl,--verbose -lmozjs-54a1 -lm -lz -ldl 

汇编第一,其次是依赖的顺序连接,与图书馆。 (我的第一个猜测是你忽略了在命令行上提及mozjs,但第二次看到它只是在错误的地方。)

+0

这对我有效。不能相信这是一个愚蠢的错误!使用版本54a1启动可执行文件时出现问题,但与版本45完全兼容 –