【问题标题】:Embedding SpiderMonkey JS嵌入 SpiderMonkey JS
【发布时间】:2017-06-29 12:32:38
【问题描述】:

我正在开发一个 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。

spidermonkey 构建中构建的“js”可执行文件工作正常,我假设其中包含我试图链接的库。所以我会认为 lib 本身构建得很好。

谁能帮我解决这些链接器错误?有很多关于旧版本 SpiderMonkey 的问题的答案,但对于更新的版本没有任何答案。我对版本 45(我尝试过的错误非常相似)或提示版本 52 感兴趣。 我很乐意在代码中四处挖掘,弄清楚一旦构建后如何使用它来做我想做的事情,因此对没有正确记录的最新版本的兴趣,我只是完全被构建步骤难住了。

【问题讨论】:

    标签: c++ spidermonkey


    【解决方案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。看了第二遍才发现它只是在错误的地方。)

    【讨论】:

    • 这对我有用。不敢相信这是一个如此愚蠢的错误!使用版本 54a1 启动可执行文件时出现问题,但它与版本 45 完美配合
    猜你喜欢
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    相关资源
    最近更新 更多