嵌入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,但第二次看到它只是在错误的地方。)
这对我有效。不能相信这是一个愚蠢的错误!使用版本54a1启动可执行文件时出现问题,但与版本45完全兼容 –