如何在Linux中使用WASI SDK将ZXing C ++构建为Wasm

WASI是一个模块化的系统界面,旨在为任何符合WASI的运行时构建可运行的.wasm模块,而不仅仅是为Node.js和Web浏览器。尽管WASI仍在开发中并且尚未稳定,但是它可用于某些实验项目。在本文中,我将分享如何通过移植ZXing C ++使用WASI SDK来构建.wasm条码读取器模块。

点击下载Dynamsoft Barcode Reader正式版


安装WASI运行时

Wasmer和Wasmtime都支持WASI。

Wasmer

curl https://get.wasmer.io -sSfL | sh

Wasmtime

获取源代码并使用Rust编译器构建wasmtime 。

设置WASI建筑环境

让我们开始使用wasi-libc。

要构建WASI Libc,您必须使用clang 8或更高版本。如果以前没有安装clang,则可能会发现apt软件存储库中未列出最新的clang版本。

解决方法是将“deb http://deb.debian.org/debian/testing main” 添加到“/etc/apt/sources.list”并更新源:

sudo apt update

然后可以看到最新的clang 9:

安装clang 9并创建相关的符号链接:

sudo apt install clang-9
sudo ln -s /usr/bin/clang-9 /usr/bin/clang
sudo ln -s /usr/bin/clang++-9 /usr/bin/clang++

现在,我们可以从源代码构建WASI库。

如果您只想使用工具链,则更方便的方法是安装wasi-sdk:

sudo dpkg -i wasi-sdk_7.0_amd64.deb
export PATH=/opt/wasi-sdk/bin:$PATH
export CC=/opt/wasi-sdk/bin/clang
export CXX=/opt/wasi-sdk/bin/clang++

为测试创建一个“hello world”程序:

#include
int main()
{
    printf("hello wasi libc\n");
    return 0;
}

构建代码:

$ clang - target=wasm32-wasi - sysroot=/opt/wasi-sdk/share/wasi-sysroot/ test.c -o test.wasm

运行应用程序:

wasmer run test.wasm
wasmtime test.wasm

移植ZXing C ++ for WASI SDK

获取zxing-cpp 的源代码。

由于当前的WASI libc尚不支持C ++异常,因此我们需要在CMakeLists.txt中添加-fno-exceptions

set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} - target=wasm32-wasi -Wall -Wextra -fno-exceptions")

另外,将sysroot设置如下:

set (CMAKE_SYSROOT /opt/wasi-sdk/share/wasi-sysroot)

为了通过构建,我禁用了所有与C ++异常相关的代码,并调整了项目结构。

将项目构建为wasm文件:

mkdir build
cd build
cmake ..
cmake --build .

在构建文件夹下运行该应用程序:

$ wasmer run zxing_barcode_reader.wasm - dir=$(pwd)/../ $(pwd)/../test.png
Text: MEBKM:URL:http\://en.wikipedia.org/wiki/Main_Page;;
Format: QR_CODE
Position: 190x367 205x162 422x165 405x342
EC Level: M

$ wasmtime zxing_barcode_reader.wasm - dir=$(pwd)/../ $(pwd)/../test.png
Text: MEBKM:URL:http\://en.wikipedia.org/wiki/Main_Page;;
Format: QR_CODE
Position: 190x367 205x162 422x165 405x342
EC Level: M

如何使用Wapm发布和运行Wasm文件

使用init命令生成wapm.toml文件:

$ wapm init zxing_barcode_reader

编辑wapm.toml:

[package]
name = "yushulx/zxing_barcode_reader"
version = "0.1.4"
description = "A barcode reader app built with ZXing C/C++ and wasi-sdk"
readme = "README.md"
repository = "https://github.com/yushulx/wasi-zxing-wasm"

[[module]]
name = "zxing_barcode_reader"
source = "dist/zxing_barcode_reader.wasm"
abi = "wasi"

[[command]]
name = "zxing_barcode_reader"
module = "zxing_barcode_reader"

将程序包发布到wapm.io:

$ wapm login
$ wapm publish

通过wapm安装软件包,并从PNG图像中读取条形码:

$ wapm install yushulx/zxing_barcode_reader
$ wapm run zxing_barcode_reader --dir=. test.png
(0)

相关推荐

  • 基于Asp.Net Core,利用ZXing来生成二维码的一般流程

    本文主要介绍如何在.net环境下,基于Asp.Net Core,利用ZXing来生成二维码的一般操作.对二维码工作原理了解,详情见:https://blog.csdn.net/weixin_36191 ...

  • WASM·技术趋势

    今天看到一则故事,一名程序员@Andreas Kling 辞掉工作,全职开发操作系统.正如其签名档一样:I like computers! 对技术的热爱已经超越了工作本身,完全是兴趣所在 shadow ...

  • objective

    Objective-C,通常写作ObjC或OC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言.它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统 ...

  • 解读 WebAssembly 的 2020:Web 以外的进展与计划

    来源 | bytecodealliance.org 整理 | 于航 策划 | 蔡芳芳 本文是 InfoQ"解读 2020"年终技术盘点系列文章之一. 大约一年前,"字节码 ...

  • 如何在 Linux 中找出 CPU 占用高的进程

    如何在 Linux 中找出 CPU 占用高的进程

  • 如何在 Linux 中使用 grep 和正则表达式搜索文本模式

    介绍 该grep命令是Linux终端环境中最有用的命令之一.grep全称为global regular expression print(全局正则表达式打印).这意味着您可以grep用来查看接收到的输 ...

  • 教你如何在linux中写脚本提高工作效率

    程序IT圈 引入:在工作中,为了在开机前预置一些资源在手机系统中,可能有人会用很多方法去实现这个功能?不过,今天告诉大家一个用shell脚本去拷贝的方法,大家先看看以下代码,看是否能看懂 . #!/b ...

  • 如何在Linux中升级R?

    小编典典 注意 :现在,我在GitHub(此处)上有关于在Linux Mint或UbuntuLinux上升级R的最新指南,其中还包含有关tidyverse流行的数据处理程序集的系统依赖项的一些额外信息 ...

  • 如何在Linux中安装vnStat和vnStati监视网络流量

    VnStat是针对Linux和BSD的基于控制台的网络流量监视工具设计.它将保留所选网络接口的网络流量日志.为了生成日志,vnStat使用内核提供的信息. 换句话说,它不会嗅探网络流量,并且可以确保系 ...

  • 如何在 Linux 中把一个网页转换成 PDF

    如何在 Linux 下将网页转换为 PDF 文件 作者: Ankush Das 译者: LCTT geekpi | 2021-10-28 11:18 当你将某些资源存档或用于教育目的时,将网页保存为 ...

  • 如何在win10中使用Linux软件?

        最近在科研时要用到一款名为ISIS的软件来处理行星数据,但是该软件只能在Linux环境下使用,百度之后了解到了神器WSL(Windows Subsystem for Linux).简而言之,W ...

  • 如何在Word中新建选项卡和组

    如何在word中新建选项卡和组呢?一起来看看操作方法吧. 1.打开Word我们要在上方的菜单栏中添加一个选项卡和组,如何来制作呢? 2.在上方的快速访问工具栏,点击下拉菜单按钮,选择其他命令. 3.然 ...

  • 如何在word中制作一个分数

    很多人都知道,在使用word软件的过程中一般是没办法直接输入分数的,此时如需要输入分数的话,需要自己动手制作.那么,在word中如何制作一个分数呢?下面就让小编来介绍一下. 1.打开电脑上的word软 ...