emscripten - 如何设置基本的 C++/C 编译,然后为 emscripten 构建链接脚本
问题描述
此测试是否为编写更成熟的构建模块做准备。但我需要先了解基础知识。希望: - 将所有“目标文件”输出构建到输出文件夹 - 将它们链接到可分发的“wasm”二进制文件并格式化 html 页面并将它们输出到“dist”文件夹。
我查看了以下手册:
https://kripken.github.io/emscripten-site/docs/tools_reference/emcc.html
它不像人们想要的那样直观或明确说明。下面是我当前的简单测试版本。
#!/bin/bash
# set emscripten toolchain paths in this shell
source "${HOME}/emsdk/emsdk_env.sh" --build=Release
BuildDir="./build" # root of output dir for built files
SrcDir="./src" # a source code directory
ObjDir="${BuildDir}/obj" # where intermediate "object" files are output to.
IncludeDir="./include" # an include directory
# start clean for this test
rm -fr "${BuildDir}"
mkdir -p "${ObjDir}" # also re-creates BuildDir
# compile source code out to ObjDir
emcc --default-obj-ext .bc -o "${ObjDir}/" -I "${IncludeDir}" \
"${SrcDir}/hello.cpp" "${SrcDir}/TestClass.cpp"`
运行上面的代码会给我错误,但如果只有一个源文件就可以工作。
Is a directory
Traceback (most recent call last):
File "/home/peterk/emsdk/emscripten/incoming/emcc.py", line 3107, in <module>
...
status 1
peterk@5a4a702ca3b5:~/didi-wasmtest/test$
下面的工作,但将所有输出文件放在 src/ 文件夹中,并为它们分配 .o 后缀而不是 .bc 后缀:它还在脚本所在的目录中输出一个 .out.js 和一个 .out.wasm 文件逃离。我想抑制这种情况,直到最后的“链接”阶段,几个编译的结果将在一个单独的步骤中链接在一起。
emcc --default-obj-ext .bc -I "${IncludeDir}" \
"${SrcDir}/hello.cpp" "${SrcDir}/TestClass.cpp"`
解决方案
好的-这很好,因为makefile无论如何都会一次编译一个。
#!/bin/bash
source "${HOME}/emsdk/emsdk_env.sh" --build=Release # set emscripten toolchain paths in this shell
BuildDir="./build" # root of output dir for built files
SrcDir="./src" # a source code directory
ObjDir="${BuildDir}/obj" # where intermediate "object" files are output to.
IncludeDir="./include" # an include directory
DistDir="./build/dist" # distribution "binary" output dir
# start clean for this test
rm -fr "${BuildDir}"
# compile source code out to ObjDir
mkdir -p "${ObjDir}"
objFiles=""
for srcFile in "${SrcDir}"/*.cpp; do
objFile="${ObjDir}/$(basename "$srcFile").bc"
emcc -o "${objFile}" -I "${IncludeDir}" "${srcFile}"
objFiles+="${objFile} " # save list of objFiles for link.
done
# link object files into binary runtime in DistDir
mkdir -p "${DistDir}"
emcc -s WASM=1 ${objFiles} -o "${DistDir}/hello.html"
# expose to browser to test
cd "${DistDir}"
python -c 'import SimpleHTTPServer; SimpleHTTPServer.test()'
推荐阅读
- c# - 保护 API 免受 SQL 注入
- python - 当我将我的 numpy 数组转换为 Dataframe 时,它会将值更新为 Nan
- ios - 如何在 swift 中使用自定义视图?
- python - 填补火花中日期缺失值的优雅方法
- gradle - Firebase admin sdk 对 gradle 的依赖导致启动层错误
- python - Python:RuntimeWarning:在 double_scalars 中遇到除以零
- javascript - 无法在地图内存储数组的状态 - Reactjs
- c - 为什么fmp4文件不能用VLC解码音频,但是用PotPlayer可以正常播放
- sql - 从SQL导入power bi时如何只选择前1000行?
- javascript - Shopify 电子商务网站如何根据颜色属性的变化来激活幻灯片?