为啥要把开发环境放在第一位呢,这里面也是采了无数的坑。
| 开发工具 | 版本 |
|---|---|
| Ubuntu | 18.04 |
| emscripten | 3.1.55 |
| cmake | 3.28.3 |
| opencv | 3.2.0 |
sudo apt-get update
sudo apt-get install libopencv-dev
dpkg -L libopencv-dev
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH
source ~/.bashrc
项目结构如下:
┌─demo 项目名称
│─build 编译文件(emcmake和emmake后的产物)
│ └─CMakeFile
│ │ └─...
│ └─cmake_install.cmake
│ └─CMakeCache.txt
│ └─Makefile
│ └─helloCV.js
│ └─helloCV.wasm
├─main.cpp 主入口
├─CMakeLists.txt
#include
#include
using namespace cv;
int main(int argc, char **argv) {
Mat M(2, 2, CV_8UC3, Scalar(0, 0, 255));
std::cout << "M = " << std::endl << " " << M << std::endl;
return 0;
}
cmake_minimum_required( VERSION 3.8 )
set( CMAKE_CXX_STANDARD 17 )
project( helloCV )
# Needed for opencv2/opencv.hpp
include_directories( /root/wasm/opencv-demo/opencv/include )
# Needed by opencv.hpp for opencv2/opencv_modules.hpp
include_directories( /root/wasm/opencv-demo/opencv/platforms/js/build_wasm )
# Needed by opencv_modules.hpp for every module
file( GLOB opencv_include_modules "/root/wasm/opencv-demo/opencv/modules/*/include" )
include_directories( ${opencv_include_modules} )
# Our hello world executable
add_executable( helloCV main.cpp )
set(CMAKE_EXECUTABLE_SUFFIX ".html") # 编译生成.html
# Link to opencv.js precompiled libraries
file( GLOB opencv_js "/root/wasm/opencv-demo/opencv/platforms/js/build_wasm/lib/*.a" )
target_link_libraries( helloCV ${opencv_js} )
//在项目根目录下,执行如下命令
mkdir build
cd build
emcmake cmake ..
emmake make
将helloCV.html、helloCV.js和helloCV.wasm三个文件下载下来,在vscode中使用preview on web server插件运行,如下图:

刚开始使用apt-get安装opencv库,并且用emcc命令行执行编译,但疯狂报错,查阅大量资料,有人说emcc只能引用静态库,动态库会报错!
make-opencv2-opencv-hpp-not-found
sudo ln -s /usr/share/OpenCV /usr/include/opencv2
How to use emscripten with cmake for project dependencies?
stackoverflow真的有太多的宝藏,在里面帖子里找到了解决方案!

问题很多,无法吐槽,只能避开,如果依赖的第三方库太多,强烈建议不要使用此方式,不然-l 写的想吐。。。