文档章节

如何通过WASI SDK 在Linux上编译ZXing C++

yushulx
 yushulx
发布于 10/24 10:28
字数 512
阅读 14
收藏 0

Mozilla在今年三月份的时候公布了WASI。WASI的目标就是让WebAssembly在任何地方都可以运行,而不仅仅像现在这样只能运行在Node.js和Web浏览器中。WASI目前依然处于初级阶段,这篇文章分享下如何把ZXing C++通过WASI Libc编译成wasm文件。

支持WASI运行时的工具

现在可以用wasmerwasmtime通过命令行来运行支持wasi的wasm文件。wasmer提供了安装包,而wasmtime只能通过源码来编译。两个工具都支持windows, Linux和macOS。

编译ZXing C++

下载最新的WASI-SDK。这个安装包中已经自带了clang,所以不需要单独安装clang。

设置环境变量:

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++

从GitHub上下载一份ZXing C++的源码

接下来要对工程结构做一些修改。首先在example中的CMakeLists.txt文件里设置sysroot:

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

因为目前的wasi-libc不支持C++的异常处理,所以要加上-fno-exceptions:

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

要编译的文件包含了scan_image.cpp以及ZXing相关的源码文件。把他们整合在一起。然后去掉所有源码中的异常处理代码。

编译工程:

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

接下来就可以运行wasm文件了:

在这里插入图片描述

$ 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发布之后也可以用wapm来运行:

在这里插入图片描述

源码

https://github.com/yushulx/wasi-zxing-wasm

© 著作权归作者所有

yushulx
粉丝 29
博文 110
码字总数 62327
作品 0
杭州
私信 提问
配置ZXing遇到的问题(解决)--未完待续

如何在iOS中使用ZXing库 Well, at last I got it working.. For anyone who encounters this in the future.. Rename the main.m file to main.mm. ZXing's README states why we need this ......

GIFCOOL
2013/10/08
179
0
Ubuntu12.04下zxing源码编译

1、下载zxing源码 git clone https://github.com/15903016222/zxing-cpp.git 2、安装依赖工具cmake sudo apt-get install cmake cmake-qt-gui 在此安装中需要使用3.0以上版本的cmake工具,而...

skyfall007
2018/07/23
0
0
ZXing扫描二维码在iphone中的使用

1、首先要下载zxing2.0.zip; 下载库地址: http://code.google.com/p/zxing/ 点击进入下载页 2、解压压缩包 里面只保留 cpp 和 iphone 两个文件夹就可以了;然后创建项目zxingtest;把zxing...

长平狐
2013/12/25
961
0
ZXing读写二维码,桌面和手机的不同用法

虽然ZXing是用Java实现的Barcode开源库,但是并不代表桌面上实现的Barcode应用在手机上也可以直接使用。因为Android的Java接口有很多是不同的。这里分享下Java Barcode生成和读取的不同用法。...

yushulx
2015/08/18
745
0
Java 二维码开发包 zxing 使用教程

有一个开源的 Java 类库叫做 “zxing” (Zebra Crossing),可以用来读写不同类型的条形码,包括二维码。 我测试了 zxing,它可以读取一个嵌在 100 dpi 的灰度文档中的条形码! 这篇文章讲述...

虫虫
2012/03/30
25.3K
6

没有更多内容

加载失败,请刷新页面

加载更多

电脑萌新向这看!荣耀笔记本装Win10系统攻略

     随着 Win10 系统功能的完善,越来越多的人想要为自己的电脑重装载一个 Win10 系统。但很多小伙伴对于重装系统也只是一知半解,不知道如何重装 win10 系统才是正确的。笔者认为,重装...

梅丽莎好
2分钟前
1
0
玩转阿里云 Terraform(四):Terraform 常用命令详解

通过前几篇文章的介绍,相信大家对Terraform已经有了大致的熟悉和了解,本文将从实践开始,向大家介绍Terraform的几个常见命令。 Terraform是一个面向客户端的工具,所以对所有资源的管理都是...

阿里云官方博客
4分钟前
1
0
GMAT数学满分目标 5条精华备考经验分享

GMAT数学对于大部分中国考生来说难度并不算太高。但伴随着近年来GMAT数学题难度逐渐提升的趋势,想要在GMAT数学部分保住高分满分的成绩以带动GMAT整体得分也变得越来越困难。下面小编就为大家...

bole6
9分钟前
2
0
elasticsearch 聚合之后获取桶的平均值avg_bucket或者stats_bucket

例子 GET /collect_data_store_goods_fact*/_search{ "query": { "match_all": {} }, "size": 0, "aggs": { "brand":{ "terms": { ......

之渊
16分钟前
3
0
一篇文章把你带入到JavaScript中的闭包与高级函数

在JavaScript中,函数是一等公民。JavaScript是一门面向对象的编程语言,但是同时也有很多函数式编程的特性,如Lambda表达式,闭包,高阶函数等,函数式编程时一种编程范式。 function dada(...

达达前端小酒馆
19分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部