コンテンツにスキップ

UbuntuにEmscriptenをインストール

Emscripten

Git をインストール

Terminal window
sudo apt update
sudo apt install git -y

Emscripten をインストール

以下のコマンドでEmscriptenをインストールします。

Terminal window
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install latest
./emsdk activate latest
source ./emsdk_env.sh
Terminal window
echo "source \"$PWD/emsdk_env.sh\"" >> $HOME/.bash_profile

使ってみる

sample.cという名前のファイルを作成し、以下のソースコードを記述します。

sample.c
1
#include <stdio.h>
2
3
void print_binary(const int num) {
4
for (int i = sizeof(num) * 8 - 1; i >= 0; i--) {
5
printf("%d", (num >> i) & 1);
6
}
7
printf("\n");
8
}
9
10
int main(void) {
11
const int nums[] = {-1, 0, 1, 2};
12
for (int i = 0; i < sizeof(nums) / sizeof(nums[0]); i++) {
13
printf("Number: %3d: ", nums[i]);
14
print_binary(nums[i]);
15
}
16
return 0;
17
}

sample.cを以下のコマンドでコンパイルします。

Terminal window
emcc sample.c
実行結果
cache:INFO: generating system asset: symbol_lists/fa6c9ed4451a325246a933ea2505f166ebdbf38d.json... (this will be cached in "$PWD/upstream/emscripten/cache/symbol_lists/fa6c9ed4451a325246a933ea2505f166ebdbf38d.json" for subsequent builds)
cache:INFO: - ok

実行

a.out.jsa.out.wasmが生成されます。

Node.js がインストールされている場合、以下のコマンドで実行できます。

Terminal window
node a.out.js
実行結果
Number: -1: 11111111111111111111111111111111
Number: 0: 00000000000000000000000000000000
Number: 1: 00000000000000000000000000000001
Number: 2: 00000000000000000000000000000010

ブラウザで実行

sample.cを以下のコマンドでコンパイルします。

Terminal window
emcc sample.c -o sample.html

以下のコマンドでローカルサーバーを起動します。

Terminal window
npx serve -p 3000

http://localhost:3000/sampleにアクセスすると、以下のような画面が表示されます。

http://localhost:3000/sample

Docker

https://emscripten.org/docs/getting_started/downloads.html#using-the-docker-image

Terminal window
docker run --rm -v $(pwd):/src -u $(id -u):$(id -g) emscripten/emsdk emcc sample.c -o sample.html