文章分享

開放、平等、協(xié)作、快速、分享

當(dāng)前位置:首頁>文章分享

Emscripten 是一個 開源的編譯器

摘錄:HCTech 無錫和控電子   時間:2023-10-14   訪問量:3013

Emscripten 是一個 開源的編譯器 ,該編譯器可以將 C/C++ 的代碼編譯成 JavaScript 膠水代碼。 Emscripten 可以將 C/C++ 代碼編譯為 WebAssembly 編程語言的代碼。

Emscripten 的底層是基于 LLVM 編譯器的,可以查看其開源的 emscripten llvm 和 emscripten clang 。

下圖是其編譯 C/C++ 的代碼的流程圖:

image.png

截止本文發(fā)布, Emscripten 最新版本是 1.38.27 .

安裝條件

以下是我安裝和使用 Emscripten 的條件。

macOS 版本 10.14

Git,可通過 Homebrew 安裝

CMake,可通過 Homebrew 安裝

Xcode 10.1

Python 2.7.x,Mac 系統(tǒng)自帶

穩(wěn)定快速的網(wǎng)絡(luò)環(huán)境,最重要和最關(guān)鍵的的是要有(neng)梯(fan)子(qiang)

解決問題的態(tài)度和毅力

通過 emsdk 安裝

安裝 Emscripten 可以通過安裝 emscripten SDK 來完成, emscripten SDK 可以簡單的理解為是 Emscripten 的一套 工具 鏈。

在你自己的電腦上面任意新建一個目錄,如我的 ~/dev/emscwork ,打開終端,進入此目錄。

1、下載 emsdk

git clone https://github.com/juj/emsdk.git

2、進入 emsdk 目錄

cd emsdk

3、開始安裝

# Fetch the latest version of the emsdk (not needed the first time you clone)git pull# Download and install the latest SDK tools../emsdk install latest# Make the "latest" SDK "active" for the current user. (writes ~/.emscripten file)./emsdk activate latest# Activate PATH and other environment variables in the current terminalsource ./emsdk_env.sh

注意: 每次更新完 emsdk 后,依舊需要執(zhí)行上面命令重新安裝和激活。

另外一個比較常用的是 ./emsdk update-tags 這個命令,可以直接更新 emsdk 的最新 tags 版本,更新 tags 完成后,重新安裝和激活最新版的 emsdk 套件。

配置 emsdk

如果你想在任意路徑下都可以使用 emsdk 里面的各種工具(就是一些二進制可執(zhí)行文件),需要為其設(shè)置環(huán)境變量。

編輯 ~/.bash_profile 文件,新增如下代碼:

export EMSDK=~/emscwork/emsdkexport EMSCRIPTEN=$EMSDK/emscripten/1.38.27export BINARYEN_ROOT=$EMSDK/binaryen/master_64bit_binaryenexport PATH=$EMSDK:$EMSCRIPTEN:$BINARYEN_ROOT:$PATH

執(zhí)行下面命令, 使剛配置的文件生效。

source ~/.bash_profile

至此,安裝和設(shè)置環(huán)境變量完成。

可以使用下面命令來查看 emsdk 的安裝情況。

emcc --version

emcc (Emscripten gcc/clang-like replacement) 1.38.27 (commit ea5d631a5446632e195765d89a53ead71cd6de45)Copyright (C) 2014 the Emscripten authors (see AUTHORS.txt)This is free and open source software under the MIT license.There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

emcc 是一個可執(zhí)行腳本,該腳本在 emsdk/emscripten/1.38.27 目錄下。

emcc --help

上面命令可以查看更多關(guān)于 emcc 的使用方法.

編譯 C/C++ 代碼

這里舉個實際的例子。

main.c

#include<stdio.h>
int main(int argc, char ** argv){
    printf("Emscripten show in browser...
");
}

使用 emcc 編譯,如下:

emcc main.c -s WASM=1 -o mz.html

這里一定要注意 WASM=1 這個選項,否則生成的格式

生成另外三個文件如下:

mz.html  mz.js  mz.wasm

簡單介紹一下這三個文件

1、mz.wasm

二進制的 wasm 模塊代碼

2、mz.js

膠水代碼,包含了原生 C 函數(shù)和 JavaScript/wasm 之間轉(zhuǎn)換的 JS 文件

3、mz.html

用來加載、編譯和實例化 wasm 代碼并且將其輸出在瀏覽器顯示上的 HTML 文件

最后執(zhí)行下面的命令,可以在 Safari 瀏覽器中顯示效果

emrun mz.html

image.png

main.cpp

#include<iostream>
using namespace std;
int main(int argc, char ** argv){
    cout << "Emscripten show in browser..." << endl;    
    return 0;
}

編譯 C++ 文件(main.cpp)

emcc main.cpp -s WASM=1 -o mzcpp.html

同樣的方式編譯和運行 mzcpp.html 即可看到同樣的效果。

Emscripten 應(yīng)用場景

Emscripten 只是一個編譯器,能將我們的高級語言編譯為瀏覽器可以識別并運行的程序,這個看起來確實很誘人。

就目前來說,Emscripten 應(yīng)用場景可以使用在安全和游戲上面。

1、安全

C/C++ 代碼經(jīng)過編譯之后,會生成 wasm 格式 的二進制文件,這個安全級別較高,即使在瀏覽器中運行,破解者也不會很輕松的破解代碼,這樣一些在 JS 中涉及到安全的問題,可以使用 C/C++ 來寫結(jié)合一些加密技術(shù),然后用 Emscripten 編譯。

2、游戲

如果能把用 C/C++ 語言寫的游戲,轉(zhuǎn)為可在瀏覽器直接運行的H5游戲,那就很美好了,用戶不需要下載游戲,直接玩?,F(xiàn)代瀏覽器技術(shù)的更新和發(fā)展已經(jīng)讓這個想法變成了現(xiàn)實,至少在主流的瀏覽器上面。


上一篇:了解 Emscripten, 是一個 開源的編譯器

下一篇:SVG

在線咨詢

點擊這里給我發(fā)消息 售前咨詢專員

點擊這里給我發(fā)消息 售后服務(wù)專員

在線咨詢

免費通話

24小時免費咨詢

請輸入您的聯(lián)系電話,座機請加區(qū)號

免費通話

微信掃一掃

微信聯(lián)系
返回頂部