godot 以 WebAssembly 为目标平台编译导出模板
1.需求
- linux系统(ubuntu20.04 LTS)
- Mono: 6.12.0.147源码.
- Emscripten: 1.39.9.
- godot源码
2.步骤
编译mono运行时和基础类库(Linux系统)
因为编译运行时使用的官方脚本只能使用Linux系统,所以我编译运行时使用的是Linux系统。
安装mono,参考https://www.mono-project.com/download/stable/#download-lin
sudo apt install gnupg ca-certificates sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF echo "deb https://download.mono-project.com/repo/ubuntu stable-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list sudo apt update sudo apt install mono-devel
下载mono源码,并切换到分支mono-6.12.0.147, 可能需要科学上网,否则下载不全
git clone --recursive https://github.com/mono/mono.git git checkout mono-6.12.0.147
安装emscripten, 并在当前终端设置环境变量,参考https://emscripten.org/docs/getting_started/downloads.html
# Get the emsdk repo git clone https://github.com/emscripten-core/emsdk.git # Enter that directory cd emsdk # Fetch the latest version of the emsdk (not needed the first time you clone) git pull # Download and install the SDK tools. ./emsdk install 1.39.9 # Make the "1.39.9" SDK "active" for the current user. (writes .emscripten file) ./emsdk activate 1.39.9 # Activate PATH and other environment variables in the current terminal source ./emsdk_env.sh
下载godot官方用来编译mono运行时的脚本, 仅支持Linux系统
git clone https://github.com/godotengine/godot-mono-builds.git
运行脚本编译mono运行时和javascript平台的基础类库
#进入下载好的脚本目录 cd godot-mono-builds#MONO_SOURCE_ROOT为mono源码路径 export MONO_SOURCE_ROOT=$HOME/mono#在构建之前,需要将一些补丁应用于 Mono 源。 python3 ./patch_mono.py#在构建 Mono 之前,可能需要将一些补丁应用到 Emscripten SDK ./patch_emscripten.py#为 WebAssembly 构建运行时。 ./wasm.py configure --target=runtime ./wasm.py make --target=runtime#为 WebAssembly 编译基础类库BCL. ./bcl.py make --product=wasm
这个过程可能很慢如果没有科学上网,如果报错如下
执行以下命令安装缺失的库sudo apt-get install git autoconf libtool automake build-essential gettext cmake python3 curl
编译导出模板(Windows系统)
首先也要windows上安装mono,emscripten1.39.9,保证设置到环境变量
下载godot源码
git clone https://github.com/godotengine/godot.git
先生成胶水代码,否则会报错:Mono glue sources not found
进入godot源码根目录,执行以下命令# 构建临时二进制文件 scons p=windows tools=yes module_mono_enabled=yes mono_glue=no # 生成胶水代码 bin\godot.windows.tools.64.mono --generate-mono-glue modules/mono/glue #构建编辑器 scons p=windows target=release_debug tools=yes module_mono_enabled=yes
注意构建临时二进制文件时是"p=windows"。
前面说过编译运行时使用的Liunx系统,本来也想要使用Linux编译继续编译导出模板的。但是在这一步出现了错误,也就是使用如下命令构建胶水代码时出现了错误:scons: *** [thirdparty/oidn/weights/rtlightmap_hdr.gen.x11.opt.tools.64.o]…# Build temporary binary scons p=x11 tools=yes module_mono_enabled=yes mono_glue=no # Generate glue sources bin/godot.x11.tools.64.mono --generate-mono-glue modules/mono/glue
原因不清楚,于是就改用windows平台生成胶水代码,后面把在Linux下生成的运行时wasm-runtime-release和bcl库复制了过来,然后继续在windows上编译导出模板。
编译javascript 平台导出模板,在godot源码根目录里执行
scons platform=javascript tools=no module_mono_enabled=yes mono_prefix="C:\Users\DannyJones\Desktop\wasm-runtime-release" bcl="C:\Users\DannyJones\Desktop\bcl"
mono_prefix和bcl分别是之前编译好的运行时目录和基础类库目录,注意一定要是绝对路径,否则会出现如下错误:找不到mono库
执行这条命令之前首先要保证环境变量里面有emsdk1.39.9。否则会出现javascript不是合法平台的错误。
此外,执行这条命令还可能出现 如下错误UnicodeDecodeError:‘gbk’ codec can’t decode …
解决办法:打开报错的文件subprocess.py,在以下位置添加红色框内的内容:
之后,重新执行以上命令,应该就能编译成功导出模板了。要想使用导出模板还需要把bcl库复制到对应godot版本的模板库目录下面,一般为C:\Users\用户名\AppData\Roaming\Godot\templates
至此,就可以使用导出模板把项目导出为web了
godot 以 WebAssembly 为目标平台编译导出模板相关推荐
- V4L2_Utils目标平台编译
在下面链接选择相应版本: https://linuxtv.org/downloads/v4l-utils/ 解压压缩包, cd v4l-utils 设置平台GCC export PATH=/home/ ...
- OpenCV导出模板参数文件
OpenCV导出模板参数文件 导出模板参数文件 目标 代码 解释 导出模板参数文件 目标 在本教程中,您将学习如何 创建一个简单的参数文件模板. 代码 #include <opencv2/cor ...
- 关于.NET编译的目标平台(AnyCPU,x86,x64) (转)
关于.NET编译的目标平台(AnyCPU,x86,x64)(转) 今天有项目的代码收到客户的反馈,要求所有的EXE工程的目标平台全部指定成x86,而所有DLL工程的目标平台全部指定成AnyCPU . ...
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
在VisualStudio中项目平台属性包含x86/x64/AnyCPU三个选项,之前的项目中并没有特别去关注这一点,最近的项目中涉及到了在不同平台运行的问题,所以专门了解并整理了这方面的知识. x8 ...
- C#编译器选项(目标平台)
用vs编译C#项目的设置中,"属性-生成-目标平台"有anycpu,x86,x64等选项. anycpu(默认值)将编译程序集为使其在任意平台上都可以运行. 在任何可能的时候,应用 ...
- VS远程调试(Visual Studio)远程连接到linux cmake(跨平台开发)(适用于VS2019,且远程目标平台cmake版本大于等于3.8)
参考文章:使用vs2019进行Linux远程开发 vs进行远程开发分为三步: 1.创建远程环境的连接,随后让vs将远程环境中的系统头文件同步到本地(也可以指定其他地方的头文件,后面会讲解),c++的代 ...
- haxe php,Haxe学习笔记(一) Haxe:一次编码全平台编译的神话
Haxe学习笔记(一) Haxe:一次编码全平台编译的神话 一 Haxe是什么? Haxe是开源的,它作为一门语言,基础语法和ActionScript3基本一致.所以任何做过Flash开发的人都可以很 ...
- android全平台编译libjpeg-turbo并基于ANativeWindow加载JPEG图片
图形图像实践 android全平台编译libjpeg-turbo并基于ANativeWindow加载JPEG图片 android全平台编译libpng并基于ANativeWindow加载PNG图片 概 ...
- vs项目属性中目标平台x86,x64,any cpu的区别
一.Any CPU平台下 编译出来的exe(可执行文件)或dll(动态链接库)是兼容的,取决于当前的操作系统,若操作系统是32位的,则编译出来的程序会以32位的软件模式运行,而在64位操作系统下则会以 ...
- WebAssembly之wasm2c工具编译使用
image.png wasm2c wasm2c -将WebAssembly二进制文件转换为C源代码和标头 wasm2c带有WebAssembly模块,并产生等效的C源代码. 选项如下: 命令 解释 - ...
最新文章
- javascript 正则表达式详解
- Linux shell 进制转换
- 【Python】学习笔记7-异常处理try。。except .. as e ....else
- 如何提高VFP应用软件的路径适应性
- jQuery的name选择器 模糊匹配
- 铁路部门调整车票预售期为15天 火车票今年不再“一票难求”
- pytorch卷积模型定义
- python练手经典100例-10 个最值得 Python 新人练手的有趣项目
- TensorFlow学习笔记--第三节张量(tensor)及其定义方法
- Python学习手册--第一部分(使用入门)
- IP问问:高精度IP定位|IP查询工具内测(街道级别)
- windows系统日志服务器搭建,windows 配置日志服务器
- 谷歌浏览器误删临时用户恢复书签
- 好男人都死到哪去了?
- 马云常说要把阿里做到102岁,那么中国从古到今有多少家过百年的企业?
- BSP和MapReduce有什么区别?
- wordpress非插件实现屏蔽英语、日语、俄语、韩语、阿拉伯语、泰语等外语垃圾评论!...
- mysql 主键查询性能_MySQL查询性能优化(精)
- [转]一个男朋友写给女朋友的信
- mysql 恢复删除数据
热门文章
- 基于Matlab的车辆型号识别系统
- 最小生成树的实现(C语言)
- 罗马数字包含以下七种字符: `I, V, X, L,C,D M`
- CrossApp 设置App启动页(无任何黑屏白屏,显示完启动画面之间到显示出首页界面)
- gibboncode导入.stl格式模型,进行网格划分
- 算法快学笔记(十五):贪婪算法与NP完全问题
- 分析日志的工具: 日志易
- python读取lmdb文件_使用python制作LMDB数据库
- 用python制作勒索病毒_python生成的exe被360识别为勒索病毒原因及解决方法
- Android Wifi控制方法总结