- blogs:
- cles::blog
2017/06/25

Emscripten を CentOS 7 で試す




Emscripten という C/C++ を JavaScript に変換できる LLVM のバックエンドを CentOS 7 で動かしてみました。
名前だけは聞いたことがあったのですが、これまできちんと動かしてみたことがなかったのでした。
Emscripten is an LLVM-based project that compiles C and C++ into highly-optimizable JavaScript in asm.js format. This lets you run C and C on the web at near-native speed, without plugins.
† CentOS だとセットアップが面倒?
あまり CentOS で使っている人はいないようで、セットアップにちょっと苦労しました。
最新版のバイナリビルドは clang が glibc が古いというエラーを吐くので、仕方なく clang はソースからビルドしました。
# 必要なツールのインストール
yum install -y epel-release
yum install -y cmake3 nodejs npm java-1.8.0-openjdk java-1.8.0-openjdk-devel
# cmake3 をデフォルトにする
ln -s /usr/bin/cmake3 /usr/local/bin/cmake
# emsdk のダウンロードと展開
cd /opt
wget https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz
tar zxvf emsdk-portable.tar.gz
cd emsdk-portable
# 最新版のバイナリビルドをインストール
./emsdk install latest
./emsdk activate latest
# clang の最新版をソースからビルド(かなり時間がかかります)
./emsdk install clang-incoming-64bit
./emsdk activate clang-incoming-64bit
# 環境変数を設定
. emsdk_env.sh
環境変数の設定の部分の . emsdk_env.sh はログインする度に実行する必要があります。
† HelloWorld してみる
例えば以下のような簡単な C のプログラムを用意しておきます。
helloworld.c
#include <stdio.h>
int main(int argc, char *args[]){
printf("Hello, World!");
return 0;
}
これを cc や gcc の代わりに emcc を使ってコンパイルします。
emcc は JavaScript を吐くコンパイラになっているので、-o の拡張子は .js にしておきます。
出力された js は nodejs を使って実行することができます。
$ emcc -O2 -o helloworld.js helloworld.c
$ node helloworld.js
Hello, World!
また、-o の拡張子を .html にするとブラウザ実行するための html を同時に生成させることもできます。
$ emcc -O2 -o helloworld.js helloworld.html
以下のページを開くと、実際にブラウザで Hello, World! が表示されるのが分かると思います。
確かにこれはいろいろ使えそうですね。
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/9428
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . Solr-rubyで複数のドキュメントを一括Post(32987)
2 . Windows 10 で勝手にログアウトされないようにする(31861)
3 . Word で数式がグレーアウトされていて挿入できないときは(26740)
4 . リモートデスクトップで Alt + PrtSc と同じことをするには(22182)
5 . Visual Studio 2017/2019 で scanf() がエラー(C4996)になるときは(21464)
2 . Windows 10 で勝手にログアウトされないようにする(31861)
3 . Word で数式がグレーアウトされていて挿入できないときは(26740)
4 . リモートデスクトップで Alt + PrtSc と同じことをするには(22182)
5 . Visual Studio 2017/2019 で scanf() がエラー(C4996)になるときは(21464)
cles::blogについて
Referrers