2015-09-01 25 views
19

Tôi thành công compiled spidermonkey (trên cửa sổ), làm cách nào tôi có thể liên kết với nó ngay bây giờ (đến embed it)?Liên kết chương trình C++ với SpiderMonkey?

js-config không được cài đặt đúng cách và tôi không hiểu this workaround.

Việc liên kết tới thư viện tĩnh sẽ dễ dàng hơn, nhưng tôi thậm chí không biết tệp đó là gì. Tôi có mozglue.lib, mozjs-43a1.lib, nspr4.lib, plc4.lib, plds4.lib trong dist/sdk/libnspr4.lib, plc4.lib, plds4.lib trong dist/lib.

Cập nhật

js-config đã không làm việc vì tôi đã có this problem (-bash: '\r': command not found vì Windows/Unix vấn đề ký tự xuống dòng, tôi chạy dos2unix js-config và tôi có thể chạy nó).

Tuy nhiên, sản lượng không giúp (trên cửa sổ):

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

Ghi chú

tôi đã sử dụng lệnh sau để biên dịch:

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

Tôi biết đó không phải là cách chính xác để biên dịch vì các thư viện đó không nằm trong số <objdir>/dist/lib. Nó sẽ trả về các lỗi sau đây:

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

Câu hỏi này dường như rút ra một số sự chú ý. Lưu ý rằng tôi đã hỏi số same question for V8.

+0

Bạn có thể cung cấp nguồn của mình trên git hay cái gì khác không? Nó có giúp thiết lập hướng dẫn endianess bằng '-mbig-endian' hoặc' -mlittle-endian' – Alex44

+1

Bạn nên định nghĩa kiến ​​trúc Windows và bộ xử lý đích. Thêm -D_WIN64 và -D_M_X64 làm tùy chọn trình biên dịch sẽ giúp ích. – Vink

+0

Có lẽ, vấn đề của tôi là tôi không biết .lib Tôi nên liên kết. –

Trả lời

3

Cách dễ dàng để sử dụng spidermoney trong các dự án Cygwin (một số kết quả đầu ra của bạn cho thấy bạn đang sử dụng Cygwin) là sử dụng gói libmozjs185 có sẵn cho Cygwin. Dự án của tôi hơi phức tạp nhưng một makefile sẽ trông giống như thế này:

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) 

Nếu ứng dụng của bạn chỉ là mã 'C' thay đổi g ++ ở trên thành gcc. Tôi có nhiều thư viện hơn là mozjs185 và tôi đặt chúng trước $ (NULL).

3

Ý tưởng đằng sau công việc là chạy js-config --libs và đặt kết quả trong JSAPI_LD_FLAGS, có thể lọc ra mọi thứ trên Darwin và sau đó nối JSAPI_LD_FLAGS vào LDFLAGS của bạn để bạn có thể liên kết các thư viện phù hợp.

Vì vậy, cho câu hỏi thư viện của bạn, câu trả lời là để có được js-config xây dựng và sau đó chạy nó với --libs

Tương tự như vậy, bạn sẽ tạo CFLAGS của bạn sử dụng một sự kết hợp của CFLAGS bạn cần đã và đầu ra của js-config --cflags. Đây là một cái gì đó bạn có thể đã tìm thấy mình đang làm với tiện ích tiện lợi pkg-config cho các thư viện khác.

Điều này không giải quyết được vấn đề về tính cuối cùng. Tại sao bạn không chỉ chạy kịch bản cấu hình?

+0

Bạn có lựa chọn thay thế nào không? –

+0

Kinh nghiệm của tôi đã không dạy tôi bất kỳ thay thế nào để chạy cấu hình nơi spidermonkey được quan tâm. Trên Cygwin tôi nhận được một gói cấu hình sẵn và phù hợp với tôi. Một thời gian dài trước đây tôi đã sử dụng một tarball nguồn với MSDEV nhưng tôi khá chắc chắn rằng tôi đã làm theo hướng dẫn một cách rõ ràng trong trường hợp đó. –

+0

Ok, tôi đã chỉnh sửa câu hỏi của mình để cung cấp thêm thông tin về vấn đề js-config của tôi. Liệu nó giúp chi tiết câu trả lời này? –

Các vấn đề liên quan