一、背景
在做pcl点云项目时,项目代码通过c++结合pcl点云库来实现,实现点云功能。在完成项目代码后,需要将c++代码通过Emscripten编译成Webassembly字节码,其中Emscripten是一个工具链,作用是通过LLVM来编译生成asm.js、WebAssembly字节码,目的是让你能够在网页中接近最快的速度运行C和C++,并且不需要任何插件。
二、项目目标
将包含pcl库的c++代码通过Emscripten编译成Webassembly字节码,供前端调用。
三、项目环境要求
a) OS:Ubuntu 18.04
b) PCL version:1.12.1
c) Emscripten version:3.1.17
四、编译流程
a) 配置docker环境
i. 拉取3.1.17版本的Emscripten镜像:docker pull emscripten/emsdk: 3.1.17,镜像中已经包含了Git、CMake、系统编译工具、Python2.7.x等先决工具。
ii. 开启容器:docker run -it -v 本机挂载目录:docke挂载目录 镜像名 /bin/bash
b) 切换到docker挂载目录,克隆pcl库以进行Emstripten编译
git clone https://github.com/luoxuhai/pcl.git
c) 切换到.\pcl\wasm\deps目录,开始构建pcl库
i.手动下载pcl库的依赖文件
1.Boost 1.80.0
https://sourceforge.net/projects/boost/files/boost/1.80.0/ boost_1_80_0.tar.gz
2. Flann 1.9.1
git clone https://github.com/luoxuhai/flann.git --depth 1 --single-branch --branch
3. Eigen 3.4.
https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.zip
ii. 对依赖库进行解压,并重命名
1. tar -xzvf boost_1_80_0.tar.gz
mv ./boost_1_80_0 ./boost
2. unzip -o -d ./ ./eigen-3.4.0.zip
mv ./eigen-3.4.0 ./eigen
3. unzip -o -d ./ ./flann-wasm.zip
mv ./flann-wasm ./flann
iii. 切换到.\pcl,开始构建
1. 构建Boost:wasm/scripts/build-boost.sh
2. 构建Flann,wasm/scripts/build-flann.sh
3. 构建PCL,wasm/scripts/build-pcl.sh
d) 将自己写的cpp文件和CMakeLists.txt放在同一工程目录下,其中CMakeLists.txt是emcc进行 cmake编译的文件,具体内容可参考
https://github.com/luoxuhai/pcl.js/blob/master/src/bind/CMakeLists.txt
注意要根据该文件做一些修改。
e) 开始cmake编译,依次执行
i. mkdir build
ii. cd build
iii. emcmake cmake ..
iv. emmake make
我们创建了一个build文件夹用来存放cmake相关的生成文件及信息,接着进入build文件夹并使用emcmake及emmake命令生成对应的WebAssembly代码.html、.js、.wasm三个文件。
f) 编译后产生的目录结构如下图:
五、编译期间出现的问题
a) 编译前需要对wasm/scripts/下的每一个.sh文件运行sed -i 's/\r$//' xxx.sh这个指令,以去除在windows系统中编辑的shell脚本的影响。同时安装pkg-config,即sudo apt install pkg-config。
b) 构建Flann时出现Could NOT find HDF5这个错误,该错误可以参考https://blog.youkuaiyun.com/MJ_Lee/article/details/122608061解决。
通过CMake的方式使用Emscripten编译pcl点云项目为Webassembly
最新推荐文章于 2025-05-29 09:52:14 发布