我正在使用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感兴趣。 我很舒服地在代码中挖掘一下如何在构建时如何做我想要的东西,因此对最新版本的兴趣没有被正确记录,我只是完全被难倒建设步骤。
答案 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。看了第二眼就看错它了。)