웹 어셈블리에서
인자로 입력 받아 결과를 웹에서 받는 예제를 찾아봄.
wasm으로 변환될 코드는 int 형을 받아서 int 형으로 출력할 것이고
#include <math.h>
extern "C" {
int int_sqrt(int x) {
return sqrt(x);
}
}
빌드는 아래와 같이 emcc를 통해 ccall과 cwrap 방식으로 _int_sqrt 함수를 내보내라 인것 같은데
int_sqrt가 아니라 _int_sqrt는 calling convention때문인가?
$ emcc tests/hello_function.cpp -o function.html -s EXPORTED_FUNCTIONS='["_int_sqrt"]' -s EXPORTED_RUNTIME_METHODS='["ccall","cwrap"]' |
웹에서 받는 법이 두가지라는데 cwrap으로 하면 int_sqrt 객체를 만들어서 한다는데 리턴이 되는진 모르겠고
ccall로 하면 인자를 던지는게 조금 귀찮아 지지만 var result에 결과가 들어가는 듯.
int_sqrt = Module.cwrap('int_sqrt', 'number', ['number'])
int_sqrt(12)
int_sqrt(28)
// Call C from JavaScript
var result = Module.ccall('int_sqrt', // name of C function
'number', // return type
['number'], // argument types
[28]); // arguments
// result is 5
[링크 : https://emscripten.org/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html]
[링크 : https://m.blog.daum.net/junek69/88]
[링크 : https://developer.mozilla.org/ko/docs/WebAssembly/C_to_wasm]
'Programming > wasm' 카테고리의 다른 글
wasm 배열 예제 (0) | 2023.01.31 |
---|---|
wasm text format (0) | 2021.10.26 |
wasm text 와 binary 상호변환 (0) | 2021.10.26 |
emcc wasm 빌드 (0) | 2021.10.25 |
wasm from c, cpp (0) | 2021.10.24 |