【发布时间】: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