Embedding SpiderMonkey JS

Embedding SpiderMonkey JS

本文关键字:JS SpiderMonkey Embedding      更新时间:2023-10-16

我正在开发一个C++应用程序。我想在应用程序中嵌入SpiderMonkey。

我正在与CMake合作,但我无法获得该版本。因此,为了减少复杂性,我尝试了本页上的示例代码。这不会从命令行使用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"可执行文件运行良好,我认为它内部有我试图链接的库。所以我认为库本身构建得还可以。

有人能帮我解决这些链接器错误吗?关于蜘蛛猴的老版本,有很多问题的答案,但对于最近的版本,没有什么答案。我对版本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。再看一眼就发现它放错了地方。)