2015-09-01 13 views
19

Con successo compiled spidermonkey (su Windows), come posso collegarlo ora (allo embed it)?Collegamento di un programma C++ con SpiderMonkey?

js-config non è installato correttamente, e non capisco this workaround.

Il collegamento alla libreria statica dovrebbe essere più semplice, ma non so nemmeno quale file sia. Ho mozglue.lib, mozjs-43a1.lib, nspr4.lib, plc4.lib, plds4.lib in dist/sdk/lib e nspr4.lib, plc4.lib, plds4.lib in dist/lib.

Aggiornamento

js-config non funzionava perché ho avuto this problem (-bash: '\r': command not found perché Windows/Unix problema caratteri di nuova riga, mi sono imbattuto dos2unix js-config e ho potuto eseguirlo).

Tuttavia, l'output non aiuta (su 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

Note

ho usato il seguente comando per compilare:

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

So che non è il modo corretto di compilarlo poiché quelle librerie non sono in <objdir>/dist/lib. Esso restituisce i seguenti errori:

[...]/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 

Questa domanda sembra trarre una certa attenzione. Si noti che ho chiesto allo same question for V8.

+0

Potete fornire la vostra fonte su un git o qualcos'altro? Aiuta a impostare il manuale di endianess con '-mbig-endian' o' -mlittle-endian' – Alex44

+1

È necessario definire l'architettura di Windows e il processore di destinazione. L'aggiunta di -D_WIN64 e -D_M_X64 come opzioni del compilatore dovrebbe aiutare. – Vink

+0

Probabilmente, il mio problema è che non so a quale .lib dovrei collegarmi. –

risposta

3

Il modo semplice per utilizzare spidermoney nei progetti Cygwin (alcuni dei vostri output suggeriscono che state usando Cygwin) è utilizzare il pacchetto libmozjs185 disponibile per Cygwin. Il mio progetto è un po 'complicato, ma un makefile sarebbe simile a questa:

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) 

Se la vostra applicazione è solo 'C' modifica del codice del g ++ sopra per gcc. Ho più librerie oltre a mozjs185 e le ho messe prima del $ (NULL).

3

L'idea alla base del lavoro intorno è quello di eseguire --libs js-config e mettere il risultato in JSAPI_LD_FLAGS, eventualmente filtrare le cose su Darwin, e quindi aggiungere JSAPI_LD_FLAGS ai vostri LDFLAGS in modo da poter collegare le librerie giuste.

Quindi per la vostra domanda biblioteca, la risposta è quello di ottenere js-config costruito e poi eseguirlo con --libs

Allo stesso modo, si creerebbe CFLAGS utilizzando una combinazione del CFLAGS è necessario già e l'uscita di js-config --cflags. Questo è qualcosa che potresti aver già trovato con l'utilissima utility pkg-config per altre librerie.

Questo non risolve il problema di endianness. Perché non esegui semplicemente lo script configure?

+0

Avete qualche alternativa? –

+0

La mia esperienza non mi ha insegnato alcuna alternativa all'esecuzione di configure in cui è interessato lo spidermonkey. Su Cygwin ricevo un pacchetto preconfigurato e questo mi si adatta. Molto tempo fa ho usato un tarball sorgente con MSDEV ma sono abbastanza sicuro di aver seguito esplicitamente le istruzioni in quel caso. –

+0

Ok, ho modificato la mia domanda per dare maggiori informazioni sul mio problema con js-config. Aiuta a dettagliare questa risposta? –

Problemi correlati