在这一部分中,你将学习: 如何使用Docker设置Emscripten的环境 emconfigure和emmake的用法 如何解决用Emscripten编译FFmpeg时的问题 如何使用Docker设置 emconfigure和emmake &的用法以及如何解决用Emscripten编译FFmpeg的问题 让我们开始寻找正确配置的旅程。在上一篇文章中,它以. /configure "${ARGS[@]}" # build ffmpeg.wasm emmake make -j4 然后它运行完立马报错: ... . /configure "${ARGS[@]}" # build ffmpeg.wasm emmake make -j4 最后我们成功地完成了emmake make -j部分,你可以看到ffplay / 建立ffmpeg的命令可以通过运行emmake make -n来提取。
# 使用 emconfigure 调用 cmake 生成 makefile emmake make # 使用 emmake 调用 make 生成 libz.a 执行 sh build.sh,编译成功后 DZLIB_LIBRARY=/wasm/zlib -DM_LIBRARY=/usr/lib/x86_64-linux-gnu # -D<key>=<value>是在命令行上给cmake添加变量的格式 emmake -DBUILD_STATIC=ON emmake make 编译libwebp git clone 源码 (https://github.com/webmproject/libwebp) 并进入源码目录 libpng -DPNG_PNG_INCLUDE_DIR=/wasm/libpng -DJPEG_LIBRARY=/wasm/libjpeg -DJPEG_INCLUDE_DIR=/wasm/libjpeg emmake /libpng:/wasm/zlib:/wasm/libjpeg:/wasm/libwebp/src:/wasm/libwebp/src/mux:/wasm/libwebp/src/demux:" emmake
/configure \ --disable-asm \ --disable-thread \ --prefix=$BUILD_DIR emmake make install-lib-static --objcc=emcc \ --dep-cc=emcc } make_ffmpeg() { NPROC=$(grep -c ^processor /proc/cpuinfo) emmake
由于我们使用了 CMake,因此 Emscripten 的编译命令需要有一点点修改,我们将不使用 emcc 而是使用 emcmake 及 emmake 来创建我们的相关 WebAssembly 代码,命令如下 : > mkdir build > cd build > emcmake cmake .. > emmake make 我们创建了一个 build 文件夹用来存放 cmake 相关的生成文件及信息,接着进入 build 文件夹并使用 emcmake 及 emmake 命令生成对应的 WebAssembly 代码 sample.html、sample.js、sample.wasm,最后我们执行访问 sample.html
用户如果手工编译需要先使用emcc 编译 protobuf ,编译之后执行emmake make即可。6.2.4.5.
c++: emmake makerust: wasm-pack buildtinygo: tinygo build -no-debug -opt=s -o main.wasm -target wasm
构建依赖 emmake make -j4 后面 -j设置启用多个内核并行去构建, 如果在配置中没有传递参数 --disable-programs, 在这一步就会把安装依赖和构建产物走完,所以如果要构建阶段加上一些额外的参数 # 构建依赖,生成ffmpeg.bc二进制产物 emmake make -j4 # 构建ffmpeg.wasm emcc -O2 -s ASSERTIONS=1 -s VERBOSE # 构建make,安装依赖 make # 或者emmake make -j4, # 安装ffmpeg及相关lib到指定目录 make install # 构建目标产物 # capture.c是我们自定义的
/emmake make ./emcc [-Ox] project.bc -o project.js Emscripten执行过程 ?
/configure "${CONFIG_ARGS[@]}" # build dependencies emmake make -j4 # build ffmpeg.wasm mkdir -p wasm
注意:上述的传参策略并不对在所有 C 项目都生效,有很多项目在编译前依赖 autoconfig/automake 等库来生成系统特定的代码,而 Emscripten 提供了 emconfigure 和 emmake