2017-02-11 7 views
1

저는 C++ 응용 프로그램을 만들고 있습니다. SpiderMonkey를 응용 프로그램에 포함시키고 싶습니다.Embedding SpiderMonkey JS

나는 CMake와 함께 일하고 있지만, 나는 그 빌드를 얻을 수 없었다. 따라서 합병증을 줄이기 위해이 page에 예제 코드를 시도했습니다. 이것은 명령 행에서 cmake 나 gcc를 사용하여 링크하지 않습니다.

그럼에도 불구하고 더 간단하게 말하면, 올바르게 링크 할 수 있도록하기 위해서 나는 다음과 같은 것들을 작동 시키려고 노력하고 있습니다. GCC와 명령 줄에서 :

g++ --std=c++11 
    -I/home/thetasinner/moz/js/src/build_DBG.OBJ/dist/include  
    -L/home/thetasinner/moz/js/src/build_DBG.OBJ/js/src -DDEBUG 
    -Wl,--verbose -lmozjs-54a1 -lm -lz -ldl test.cpp -o test 

다음과 같은 최소한의 코드 예제에서 :

#include <iostream> 
#include <stdexcept> 
#include "jsapi.h" 
#include "js/Initialization.h" 

int main(int argc, char** args) { 
    if (!JS_Init()) { 
    throw std::runtime_error("failed to initialise."); 
    } 

    std::cout << "It's alive!\n"; 

    JS_ShutDown(); 
    return 0; 
} 

심지어이 연결되지 않습니다. 나는 오류가

/tmp/ccqjx5RY.o: In function `main': 
    custom.cpp:(.text+0xf2): undefined reference to `JS_ShutDown()' 
/tmp/ccqjx5RY.o: In function `JS_Init()': 
    custom.cpp:(.text._Z7JS_Initv[_Z7JS_Initv]+0xa): undefined reference to 
     'JS::detail::InitWithFailureDiagnostic(bool)' 
collect2: error: ld returned 1 exit status 

헤더가 발견 얻을 빌드 도구가있는 곳이기 때문에 링커는 mozjs 라이브러리

attempt to open /home/thetasinner/moz/js/src/custom_build_DBG.OBJ/js/src 
    /libmozjs-54a1.so succeeded 
-lmozjs-54a1 (/home/thetasinner/moz/js/src/custom_build_DBG.OBJ/js/src 
    /libmozjs-54a1.so) 

나는 (시도 우분투 16.04 데비안 8.7) 리눅스 일하고을 찾는 것입니다 . 나는 아직 창문에 손댈 필요가 없다.

spidermonkey 빌드에 내장 된 'js'실행 파일이 정상적으로 작동합니다. 내부에 링크하려고하는 lib가 있다고 가정합니다. 그래서 lib 자체가 괜찮다고 생각했을 것입니다.

누구든지이 링커 오류를 해결할 수 있습니까? 이전 버전의 SpiderMonkey에 대한 많은 질문에 대한 답변이 있지만 최신 버전에는 아무 것도 없습니다. 나는 버전 45 (매우 비슷한 오류로 시도했다) 또는 팁 버전 52에 관심이있다. 일단 코드를 작성하면 코드로 원하는 작업을 수행 할 수있는 코드를 충분히 파고있다. 제대로 문서화되지 않은 최신 버전에 대한 관심은 건물 단계와 완전히 뒤죽박죽입니다.

답변

1

나는 그냥 명령 줄에 주문 문제 용의자 :

g++ --std=c++11 
-I/home/thetasinner/moz/js/src/build_DBG.OBJ/dist/include  
-L/home/thetasinner/moz/js/src/build_DBG.OBJ/js/src -DDEBUG 
test.cpp -o test 
-Wl,--verbose -lmozjs-54a1 -lm -lz -ldl 

컴파일 첫째, 의존성의 순서로 라이브러리, 연결 하였다. (내 첫 번째 추측은 명령 행에서 mozj를 언급하는 것을 게을리했다는 것입니다. 잘못된 위치에있는 것을보기 위해 다시 보았습니다.)

+0

이것은 나를 위해 일했습니다. 그렇게 어리석은 실수라고 믿을 수 없어! 버전 54a1로 실행 파일을 시작하는 데 문제가 있었지만 버전 45와 완벽하게 작동합니다. –