2015-09-01 21 views
19

我成功地在compiled spidermonkey(在窗口),我現在怎麼能連接它(到embed it)?鏈接一個C++程序與SpiderMonkey?

js-config沒有正確安裝,我不明白this workaround

鏈接到靜態庫應該更容易,但我甚至不知道它是哪個文件。我有mozglue.lib, mozjs-43a1.lib, nspr4.lib, plc4.lib, plds4.libdist/sdk/libnspr4.lib, plc4.lib, plds4.libdist/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

+0

你可以在git或其他東西上提供源代碼嗎?是否有助於使用-mbig-endian或-mlittle-endian來設置永久性手冊 – Alex44

+1

您應該定義Windows體系結構和目標處理器。添加-D_WIN64和-D_M_X64作爲編譯器選項應該有所幫助。 – Vink

+0

也許,我的問題是,我不知道應該鏈接哪個.lib。 –

回答

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) 

如果您的應用只有「C」代碼更改的G ++以上GCC。除了mozjs185之外,我還有更多的庫,我把它們放在$(NULL)之前。

3

工作都是圍繞背後的想法是運行JS-配置--libs並把結果JSAPI_LD_FLAGS,可能濾除達爾文的東西,然後追加JSAPI_LD_FLAGS到您的LDFLAGS,所以你可以鏈接正確的庫。

因此,對於你的庫的問題,答案是讓JS-配置建立,然後用--libs

運行它。同樣,你會用你需要已經CFLAGS和輸出的組合創建CFLAGS的js-config --cflags。這是你可能已經發現自己用其他庫的漂亮的pkg-config工具來做的事情。

這不能解決字節順序問題。你爲什麼不運行配置腳本?

+0

你有其他的選擇嗎? –

+0

我的經驗並沒有教給我任何替代方法來運行spidermonkey所關心的配置。在Cygwin上,我得到了一個預配置的軟件包,適合我。很久以前,我使用MSDEV的源代碼tarball,但我很確定在那種情況下我明確地遵循了指示。 –

+0

好的,我編輯了我的問題,以提供有關我的js-config問題的更多信息。這有助於詳細解釋這個答案嗎? –