文章分享

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

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

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

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

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

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

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

image.png

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

安裝條件

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

通過 emsdk 安裝

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

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

1、下載 emsdk

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

2、進(jìn)入 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 里面的各種工具(就是一些二進(jìn)制可執(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++ 代碼

這里舉個實(shí)際的例子。

main.c

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

使用 emcc 編譯,如下:

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

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

生成另外三個文件如下:

mz.html  mz.js  mz.wasm

簡單介紹一下這三個文件

1、mz.wasm

二進(jìn)制的 wasm 模塊代碼

2、mz.js

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

3、mz.html

用來加載、編譯和實(shí)例化 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

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

Emscripten 應(yīng)用場景

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

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

1、安全

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

2、游戲

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



本文來源:碼農(nóng)網(wǎng)
本文鏈接:https://www.codercto.com/a/59841.html


上一篇:2023年度最好的18個開源CAD軟件

下一篇:Emscripten 是一個 開源的編譯器

在線咨詢

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

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

在線咨詢

免費(fèi)通話

24小時免費(fèi)咨詢

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

免費(fèi)通話

微信掃一掃

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