将C ++程序与SpiderMonkey链接?

时间:2015-09-01 10:11:48

标签: c++ compilation spidermonkey

我成功compiled spidermonkey(在Windows上),我现在如何链接它(到embed it)?

js-config未正确安装,我不理解this workaround

链接到静态库应该更容易,但我甚至不知道它是哪个文件。我mozglue.lib, mozjs-43a1.lib, nspr4.lib, plc4.lib, plds4.lib中的dist/sdk/libnspr4.lib, plc4.lib, plds4.lib中的dist/lib

更新

js-config无效,因为我有this problem-bash: '\r': command not found,因为Windows / Unix换行符问题,我运行dos2unix js-config我可以运行它。

然而,输出没有帮助(在Windows上):

$ ./js-config --cflags -std=gnu++0x -include /usr/local/include/mozjs-43a1/js/RequiredDefines.h -I/usr/local/include/mozjs-43a1 -Ic:/Users/Yvain/Documents/mozilla-central/js/src/build_OPT.OBJ/dist/include/nspr

$ ./js-config --libs ${libdir}/${JS_LIBRARY_NAME}.lib c:/Users/Yvain/Documents/mozilla-central/js/src/build_OPT.OBJ/dist/lib/nspr4.lib c:/Users/Yvain/Documents/mozilla-central/js/src/build_OPT.OBJ/dist/lib/plc4.lib c:/Users/Yvain/Documents/mozilla-central/js/src/build_OPT.OBJ/dist/lib/plds4.lib kernel32.lib user32.lib gdi32.lib winmm.lib wsock32.lib advapi32.lib psapi.lib

备注

我使用以下命令编译:

g++ -std=c++11 -I<objdir>/dist/include -L<objdir>/dist/lib helloworld.cpp -o helloworld  -lmozjs-31 -lz -lpthread -ldl 

我知道这不是编译它的正确方法,因为这些库不在<objdir>/dist/lib中。它返回以下错误:

[...]/jscpucfg.h:121:3: erreur:
#error "Cannot determine endianness of your platform. Please add support to jscpucfg.h."
[...]
erreur: ‘JS_EvaluateScript’ was not declared in this scope

这个问题似乎引起了一些注意。请注意,我问了same question for V8

2 个答案:

答案 0 :(得分:3)

解决这个问题背后的想法是运行js-config --libs并将结果放在JSAPI_LD_FLAGS中,可能过滤掉Darwin上的内容,然后将JSAPI_LD_FLAGS附加到LDFLAGS,以便链接正确的库。

因此,对于您的库问题,答案是构建js-config然后使用--libs

运行它

同样,您可以使用已经需要的CFLAGS和js-config --cflags的输出组合创建CFLAGS。这可能是您已经发现自己正在使用其他库的漂亮的pkg-config实用程序。

这不能解决字节序问题。你为什么不运行配置脚本?

答案 1 :(得分:3)

在Cygwin项目中使用spidermoney的简单方法(你的一些输出表明你使用的是Cygwin)是使用可用于Cygwin的libmozjs185包。我的项目有点复杂,但makefile看起来像这样:

CFLAGS += -g -I/usr/include/js -DXP_UNIX
CXXFLAGS += -g -I/usr/include/js -DXP_UNIX
JSLINK=-lmozjs185

objs = <your .o files>

<your app>: $(objs)
    g++ -g -o <your app> $(objs) \
    $(JSLINK) \
    $(NULL)

如果您的应用只是&#39; C&#39;代码将上面的g ++更改为gcc。我有更多的库,除了mozjs185,我把它们放在$(NULL)之前。