DEV.log

Uncaught (in promise) LinkError: WebAssembly.instantiate(): Import #1 module="env" function="__table_base" error: global import must be a number, valid Wasm reference, or WebAssembly.Global object 본문

WebAssembly/웹어셈블리 인 액션

Uncaught (in promise) LinkError: WebAssembly.instantiate(): Import #1 module="env" function="__table_base" error: global import must be a number, valid Wasm reference, or WebAssembly.Global object

magnae2016 2022. 1. 30. 11:57

Where did the problem occur?

  • 도서명
    웹어셈블리 인 액션
  • 구분
    주요 기술 오류(로직/코드)
  • 상품 버전
    종이책
  • 페이지
    72~73 페이지
  • 위치정보
    3.6 엠스크립튼으로 웹어셈블리 파일만 생성하기
    3.6.1 엠스크립튼으로 C/C++ 코드를 사이드 모듈로 컴파일
  • 본문 내용
    이 때 최적화 플래그 -O1를 지정해야 합니다. 모듈은 여러 함수와 전역 변수를 필요로 하는데 코드에는 이런 것들이 하나도 없기 때문입니다. 따라서 -O0 이외의 최적화 플래그를 추가해야 문제가 해결되며, 바로 다음 단계의 최적화인 -O1 플래그가 적당합니다.

    emcc side_module.c -s SIDE_MODULE=2 -O1 -s EXPORTED_FUNCTIONS=['_Increment'] -o side_module.wasm

 

Problem
emcc 명령에서 최적화 플래그로 -O1을 지정하여 웹어셈블리 모듈로 컴파일 하면 side_module.wasm 라는 파일이 생성됩니다. 자바스크립트에서 side_module.wasm 파일을 WebAssembly.instantiateStreaming 함수를 이용해 로드하고 웹 페이지에 접속해보면 개발자 도구 콘솔창에서 오류를 확인할 수 있습니다.

 

Uncaught (in promise) LinkError: WebAssembly.instantiate(): Import #1 module="env" function="__table_base" error: global import must be a number, valid Wasm reference, or WebAssembly.Global object

 

 

Answers

최적화 플래그 -O2를 지정하면 됩니다.

emcc side_module.c -s SIDE_MODULE=2 -O2 -s EXPORTED_FUNCTIONS=['_Increment'] -o side_module.wasm

 

Environment

  • macOS
  • emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.2
  • python-3.9.2
  • node-14.18.2

 

참고 자료

https://velog.io/@errorcode4319/WASM-001.-처음해보는-웹어셈블리

http://www.yes24.com/Product/Goods/92907281

 

웹어셈블리 인 액션 - YES24

웹 개발의 새로운 지평을 열게 될 잠재력 높은 기술!웹어셈블리를 처음 접하는 분을 위한 안내서로, 자바스크립트에 의존하지 않고도 브라우저 기반의 고성능 애플리케이션을 만들 수 있는 방

www.yes24.com

0 Comments
댓글쓰기 폼