2015-09-01 2 views
19

Я успешно compiled spidermonkey (на окнах), как я могу связать его сейчас (до embed it)?Ссылка на C++-программу с помощью SpiderMonkey?

js-config не установлен надлежащим образом, и я не понимаю this workaround.

Ссылка на статическую библиотеку должна быть проще, но я даже не знаю, какой файл она есть. У меня mozglue.lib, mozjs-43a1.lib, nspr4.lib, plc4.lib, plds4.lib в dist/sdk/lib и nspr4.lib, plc4.lib, plds4.lib в dist/lib.

Update

js-config не работал, потому что я this problem (-bash: '\r': command not found из-за Windows/Unix проблемы перевода строки символов, я побежал dos2unix js-config и я мог запустить его).

Однако выход не помогает (на окнах):

$ ./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 или еще что-нибудь? Помогает ли это установить руководство по endianess с помощью '-mbig-endian' или' -mlittle-endian' – Alex44

+1

Вы должны определить архитектуру Windows и целевой процессор. Добавление -D_WIN64 и -D_M_X64 в качестве параметров компилятора должно помочь. – Vink

+0

Наверное, моя проблема в том, что я не знаю, к чему .lib мне нужно было бы связать. –

ответ

3

Простой способ использования spidermoney в проектах Cygwin (некоторые из ваших выводов показывают, что вы используете Cygwin) заключается в использовании пакета libmozjs185, который доступен для Cygwin. Мой проект немного сложнее, но 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» Г ++ выше НКУ. У меня есть больше библиотек помимо mozjs185, и я помещаю их в опцию $ (NULL).

3

Идея работы вокруг запустить JS-конфигурацию --libs и поместить результат в JSAPI_LD_FLAGS, возможно отфильтровать вещи по Дарвину, а затем добавить JSAPI_LD_FLAGS к вашей LDFLAGS, так что вы можете связать правильные библиотеки.

Так что для вашей библиотеки вопроса, ответ получить JS-конфигурация построена, а затем запустить его с --libs

Кроме того, вы можете создать свои CFLAGS, используя комбинацию CFLAGS вам нужно уже и выхода от js-config --cflags. Это то, что вы, возможно, уже сделали с помощью полезной утилиты pkg-config для других библиотек.

Это не решает проблему с контентом. Почему бы вам просто не запустить скрипт configure?

+0

Есть ли у вас альтернативы? –

+0

Мой опыт не научил меня альтернативе запуску configure, где находится spidermonkey. На Cygwin я получаю предварительно сконфигурированный пакет, и это мне подходит. Давным-давно я использовал исходный tarball с MSDEV, но я уверен, что в этом случае я строго следовал указаниям. –

+0

Хорошо, я отредактировал мой вопрос, чтобы узнать больше о моей проблеме js-config. Помогает ли это детализировать этот ответ? –

Смежные вопросы