嵌入SpiderMonkey JS

时间:2017-02-11 02:40:42

标签: c++ spidermonkey

我正在使用C ++应用程序。我想在应用程序中嵌入SpiderMonkey。

我和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。

&#39; js&#39;在spidermonkey构建中构建的可执行文件工作正常,我假设有lib我试图在其中链接。所以我原以为lib本身就可以了。

有人可以帮我解决这些链接器错误吗?关于SpiderMonkey的旧版本的问题有很多答案,但对于更新版本没有任何帮助。我对版本45(我尝试过非常类似的错误)或提示版本52感兴趣。 我很舒服地在代码中挖掘一下如何在构建时如何做我想要的东西,因此对最新版本的兴趣没有被正确记录,我只是完全被难倒建设步骤。

1 个答案:

答案 0 :(得分:1)

我怀疑这只是命令行上的排序问题:

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。看了第二眼就看错它了。)