¿Vinculando un programa de C++ con SpiderMonkey?
compilation (2)
Compilé con éxito spidermonkey (en windows), ¿cómo puedo enlazarlo ahora (para incrustarlo )?
js-config no está instalado correctamente y no entiendo esta solución .
El enlace a la biblioteca estática debería ser más fácil, pero ni siquiera sé qué archivo es. Tengo mozglue.lib, mozjs-43a1.lib, nspr4.lib, plc4.lib, plds4.lib
en dist/sdk/lib
y nspr4.lib, plc4.lib, plds4.lib
en dist/lib
.
Actualizar
js-config
no funcionaba porque tenía este problema ( -bash: ''/r'': command not found
debido al problema de caracteres de nueva línea de Windows / Unix, ejecuté dos2unix js-config
y pude ejecutarlo).
Sin embargo, la salida no ayuda (en 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
Notas
Utilicé el siguiente comando para compilar:
g++ -std=c++11 -I<objdir>/dist/include -L<objdir>/dist/lib helloworld.cpp -o helloworld -lmozjs-31 -lz -lpthread -ldl
Sé que no es la forma correcta de compilarlo ya que esas bibliotecas no están en <objdir>/dist/lib
. Devuelve los siguientes errores:
[...]/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
Esta pregunta parece llamar la atención. Tenga en cuenta que hice la misma pregunta para V8 .
La forma fácil de usar spidermoney en los proyectos de Cygwin (algunos de sus resultados sugieren que está utilizando Cygwin) es usar el paquete libmozjs185 que está disponible para Cygwin. Mi proyecto es un poco complicado pero un makefile se vería así:
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)
Si su aplicación es solo el código ''C'', cambie el g ++ anterior a gcc. Tengo más bibliotecas además de mozjs185 y las coloco por delante de $ (NULL).
La idea detrás del trabajo es ejecutar js-config --libs y poner el resultado en JSAPI_LD_FLAGS, posiblemente filtrar cosas en Darwin, y luego agregar JSAPI_LD_FLAGS a tus LDFLAGS para que puedas vincular las bibliotecas correctas.
Entonces, para la pregunta de la biblioteca, la respuesta es compilar js-config y luego ejecutarlo con --libs
Del mismo modo, creará su CFLAGS utilizando una combinación de los CFLAGS que ya necesita y la salida de js-config --cflags
. Esto es algo que quizás ya haya encontrado haciendo con la utilidad pkg-config para otras bibliotecas.
Esto no resuelve el problema del endianismo. ¿Por qué no ejecutas el script de configuración?