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

嵌入SpiderMonkey JS 我正在研究C++应用程序。我想在应用程序中嵌入SpiderMonkey,c++,spidermonkey,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/s

我和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;
}
找到了头,链接器找到了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都试过了),因为这就是构建工具的所在。我甚至还不想碰窗户

spidermonkey构建中构建的“js”可执行文件运行良好,我假设它包含我试图链接的库。所以我认为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时工作得很好
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