2017-11-27 34 views
1

웹 사이트에 emscripten 컴파일 모듈을 추가하려고합니다. 이를 위해 나는 browserify (babelify 변환 포함)를 사용하고 있습니다.Emscripten module in browserify 파이프 라인

번들을 만들 때 문제가 발생합니다. emscripten 코드는 결과 js 파일에 래핑되지만 Module은 빈 객체입니다. emscripten browserify error

길고도 짧은 이야기 : 나는 몇 가지 제한 함께 일하고 있어요

_main2.default._int_sqrt is not a function 

:

import Module from "./main"; 
console.log(Module._int_sqrt(9)); 

반환이 오류를 다음과 같은 그림을 보여줍니다 같은 코드는 실제로 해석되는 그것의 스크립트를 HTML 페이지에 직접 추가 할 수는 없습니다. 이 빌드 단계의 출력은 모든 종속성을 포함하는 단일 js 파일이어야합니다.

최소한의 테스트 사례 here을 만들었으므로 누구나 문제를 복제 할 수 있습니다.

emscripten이나 browserify의 버그가 아니므로 이에 대한 지침을 알려 주시면 감사하겠습니다.

마지막주의 : 소스 cpp 코드가 올바르게 작동합니다. 모카로 작성된 테스트를 실행하고 있는지 확인할 수 있습니다.

+0

을 확인하고 싶은 경우에, the test case 업데이트되었습니다

import Module from "./main"; let m = new Module(); console.log(m._int_sqrt(9)) 

오류가이었다 나는 js에 오류 코드가있어서 그 결과가 비어있는 파일이었고 js 파일을 확인하고 특히 vars, good luck 대신 literal objects를 반환했습니다. – ZiTAL

+0

js 파일을 검사하면 모듈을 가져 와서 결과를 인쇄합니다. 수입. 오류는 js 자체와 관련이 없습니다. emscripten 모듈은 노드 환경에서 올바르게 처리됩니다 (예 : mocha test demonstrations). 문제는 browserify에 의해 수행 된 자동 번들에서 발생합니다. 환경을 브라우저가 감지하므로 nodejs 모듈 (module.exports 변수에 자체 바인딩)처럼 동작 할 것으로 예상됩니다. –

+1

1) 최적화가없는 모듈 2) browserify를 사용하여 어떤 변수가 설정되어 있는지 확인하십시오 3) 컴파일 된 모듈에서 흐름을 봅니다 4) 변수가 맞습니까? –

답변

1

emscripten 도구의 도움으로 해결책을 찾을 수있었습니다.

컴파일 플래그 -s MODULARIZE=1이 emcc 컴파일 단계에 추가되면이 문제가 해결됩니다. 그런 다음 js 코드에서 Module의 인스턴스를 만듭니다. 이 인스턴스에는 액세스 할 수있는 함수가 있습니다.

JS 코드는 다음과 같이한다 : 나는 누군가가 내가 추하게의 NPM 모듈과 유사한 문제를 가지고 그것을