2015-09-01 11 views
19

ich erfolgreich compiled spidermonkey (unter Windows), wie kann ich es verbinden gegen jetzt (zu embed it)?Verknüpfen eines C++ Programms mit SpiderMonkey?

js-config ist nicht richtig installiert, und ich verstehe nicht this workaround.

auf die statische Bibliothek verknüpfen sollte einfacher sein, aber ich weiß nicht einmal, welche Datei es sich handelt. Ich habe mozglue.lib, mozjs-43a1.lib, nspr4.lib, plc4.lib, plds4.lib in dist/sdk/lib und nspr4.lib, plc4.lib, plds4.lib in dist/lib.

aktualisiert

js-config nicht funktioniert, weil ich this problem hatte (-bash: '\r': command not found Problem, weil Windows/Unix Zeilenumbrüche, lief ich dos2unix js-config und ich konnte es laufen).

Allerdings ist der Ausgang nicht (unter Windows) helfen:

$ ./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

Hinweise

ich den folgenden Befehl zu kompilieren:

Ich weiß, es ist nicht der richtige Weg, um es zu kompilieren, da diese Bibliotheken nicht in <objdir>/dist/lib sind. Es gibt die folgenden Fehler:

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

Diese Frage scheint eine gewisse Aufmerksamkeit zu ziehen. Beachten Sie, dass ich die same question for V8 fragte.

+0

Können Sie Ihre Quelle auf einem Git oder etwas anderem bereitstellen? Ist es hilfreich, das endianess-Handbuch mit "-mbig-endian" oder "-mlittle-endian" zu setzen? – Alex44

+1

Sie sollten die Windows-Architektur und den Zielprozessor definieren. Hinzufügen von -D_WIN64 und -D_M_X64 als Compiler-Optionen sollte helfen. – Vink

+0

Wahrscheinlich ist mein Problem, dass ich nicht weiß, auf welche .lib ich verlinken sollte. –

Antwort

3

Der einfache Weg spidermoney in Cygwin Projekte zu verwenden (einige Ihrer Ausgabe legt nahe, den Sie verwenden Cygwin) ist das libmozjs185 Paket zu verwenden, die für Cygwin verfügbar ist. Mein Projekt ist ein bisschen kompliziert, aber eine Make-Datei wie folgt aussehen würde:

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) 

Wenn Ihre Anwendung ist nur die g ++ oben auf gcc ‚C‘ Code ändern. Ich habe mehr Bibliotheken neben mozjs185 und ich lege sie vor dem $ (NULL).

3

Die Idee hinter der Arbeit ist um js-config --libs und das Ergebnis in JSAPI_LD_FLAGS, möglicherweise herauszufiltern Dinge auf Darwin, und dann hängen Sie JSAPI_LD_FLAGS zu Ihrem LDFLAGS laufen, so dass Sie die richtigen Bibliotheken verknüpfen.

Also für Ihre Bibliothek Frage, die Antwort ist js-config aufgebaut und führen Sie es mit --libs

Ebenso würden Sie erstellen Ihre CFLAGS mit einer Kombination aus der CFLAGS Sie müssen bereits und die Ausgabe zu erhalten von js-config --cflags. Dies ist etwas, was Sie möglicherweise bereits mit dem raffinierten Dienstprogramm pkg-config für andere Bibliotheken getan haben. Dies löst nicht das Problem Endian

. Warum führst du nicht einfach das configure-Skript aus?

+0

Haben Sie Alternativen? –

+0

Meine Erfahrung hat mir keine Alternative zum Ausführen von configure bei spidermonkey beigebracht. Auf Cygwin bekomme ich ein vorkonfiguriertes Paket und das passt zu mir. Vor langer Zeit habe ich einen Quell-Tarball mit MSDEV verwendet, aber ich bin mir ziemlich sicher, dass ich in diesem Fall die Anweisungen explizit befolgt habe. –

+0

Ok, ich habe meine Frage bearbeitet, um mehr über mein js-config-Problem zu erfahren. Hilft es, diese Antwort zu beschreiben? –