我正在开发一个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尝试过)上工作,因为那里有构建工具。我还不想碰窗子呢。
蜘蛛猴构建的'js‘可执行文件运行良好,我假设里面有我想要链接的lib。所以我会认为lib本身构建的很好。
有人能帮我解决这些链接器错误吗?关于更老的SpiderMonkey版本的问题有很多答案,但对于较新的版本没有任何答案。我对版本45 (我已经尝试过非常类似的错误)或tip版本52很感兴趣。我很喜欢在代码中钻研,找出如何在它构建后做我想做的事情,因此对没有适当文档的最新版本感兴趣,我只是完全被构建步骤难住了。
发布于 2017-02-11 10:52:08
我怀疑这只是命令行上的排序问题:
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。我又看了一眼,才发现它放错了地方。)
https://stackoverflow.com/questions/42171598
复制相似问题