1.需求

  • linux系统(ubuntu20.04 LTS)
  • Mono: 6.12.0.147源码.
  • Emscripten: 1.39.9.
  • godot源码

2.步骤

编译mono运行时和基础类库(Linux系统)

因为编译运行时使用的官方脚本只能使用Linux系统,所以我编译运行时使用的是Linux系统。

  1. 安装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
    
  2. 下载mono源码,并切换到分支mono-6.12.0.147, 可能需要科学上网,否则下载不全

    git clone --recursive https://github.com/mono/mono.git
    git checkout mono-6.12.0.147
    
  3. 安装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
    
  4. 下载godot官方用来编译mono运行时的脚本, 仅支持Linux系统

    git clone https://github.com/godotengine/godot-mono-builds.git
    
  5. 运行脚本编译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,保证设置到环境变量

  1. 下载godot源码

    git clone https://github.com/godotengine/godot.git
    
  2. 先生成胶水代码,否则会报错: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上编译导出模板。

  3. 编译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,在以下位置添加红色框内的内容:

    之后,重新执行以上命令,应该就能编译成功导出模板了。

  4. 要想使用导出模板还需要把bcl库复制到对应godot版本的模板库目录下面,一般为C:\Users\用户名\AppData\Roaming\Godot\templates

    至此,就可以使用导出模板把项目导出为web了

godot 以 WebAssembly 为目标平台编译导出模板相关推荐

  1. V4L2_Utils目标平台编译

    在下面链接选择相应版本: https://linuxtv.org/downloads/v4l-utils/ 解压压缩包, cd v4l-utils 设置平台GCC export PATH=/home/ ...

  2. OpenCV导出模板参数文件

    OpenCV导出模板参数文件 导出模板参数文件 目标 代码 解释 导出模板参数文件 目标 在本教程中,您将学习如何 创建一个简单的参数文件模板. 代码 #include <opencv2/cor ...

  3. 关于.NET编译的目标平台(AnyCPU,x86,x64) (转)

    关于.NET编译的目标平台(AnyCPU,x86,x64)(转) 今天有项目的代码收到客户的反馈,要求所有的EXE工程的目标平台全部指定成x86,而所有DLL工程的目标平台全部指定成AnyCPU . ...

  4. 关于.NET编译的目标平台(AnyCPU,x86,x64)

    在VisualStudio中项目平台属性包含x86/x64/AnyCPU三个选项,之前的项目中并没有特别去关注这一点,最近的项目中涉及到了在不同平台运行的问题,所以专门了解并整理了这方面的知识. x8 ...

  5. C#编译器选项(目标平台)

    用vs编译C#项目的设置中,"属性-生成-目标平台"有anycpu,x86,x64等选项. anycpu(默认值)将编译程序集为使其在任意平台上都可以运行. 在任何可能的时候,应用 ...

  6. VS远程调试(Visual Studio)远程连接到linux cmake(跨平台开发)(适用于VS2019,且远程目标平台cmake版本大于等于3.8)

    参考文章:使用vs2019进行Linux远程开发 vs进行远程开发分为三步: 1.创建远程环境的连接,随后让vs将远程环境中的系统头文件同步到本地(也可以指定其他地方的头文件,后面会讲解),c++的代 ...

  7. haxe php,Haxe学习笔记(一) Haxe:一次编码全平台编译的神话

    Haxe学习笔记(一) Haxe:一次编码全平台编译的神话 一 Haxe是什么? Haxe是开源的,它作为一门语言,基础语法和ActionScript3基本一致.所以任何做过Flash开发的人都可以很 ...

  8. android全平台编译libjpeg-turbo并基于ANativeWindow加载JPEG图片

    图形图像实践 android全平台编译libjpeg-turbo并基于ANativeWindow加载JPEG图片 android全平台编译libpng并基于ANativeWindow加载PNG图片 概 ...

  9. vs项目属性中目标平台x86,x64,any cpu的区别

    一.Any CPU平台下 编译出来的exe(可执行文件)或dll(动态链接库)是兼容的,取决于当前的操作系统,若操作系统是32位的,则编译出来的程序会以32位的软件模式运行,而在64位操作系统下则会以 ...

  10. WebAssembly之wasm2c工具编译使用

    image.png wasm2c wasm2c -将WebAssembly二进制文件转换为C源代码和标头 wasm2c带有WebAssembly模块,并产生等效的C源代码. 选项如下: 命令 解释 - ...

最新文章

  1. javascript 正则表达式详解
  2. Linux shell 进制转换
  3. 【Python】学习笔记7-异常处理try。。except .. as e ....else
  4. 如何提高VFP应用软件的路径适应性
  5. jQuery的name选择器 模糊匹配
  6. 铁路部门调整车票预售期为15天 火车票今年不再“一票难求”
  7. pytorch卷积模型定义
  8. python练手经典100例-10 个最值得 Python 新人练手的有趣项目
  9. TensorFlow学习笔记--第三节张量(tensor)及其定义方法
  10. Python学习手册--第一部分(使用入门)
  11. IP问问:高精度IP定位|IP查询工具内测(街道级别)
  12. windows系统日志服务器搭建,windows 配置日志服务器
  13. 谷歌浏览器误删临时用户恢复书签
  14. 好男人都死到哪去了?
  15. 马云常说要把阿里做到102岁,那么中国从古到今有多少家过百年的企业?
  16. BSP和MapReduce有什么区别?
  17. wordpress非插件实现屏蔽英语、日语、俄语、韩语、阿拉伯语、泰语等外语垃圾评论!...
  18. mysql 主键查询性能_MySQL查询性能优化(精)
  19. [转]一个男朋友写给女朋友的信
  20. mysql 恢复删除数据

热门文章

  1. 基于Matlab的车辆型号识别系统
  2. 最小生成树的实现(C语言)
  3. 罗马数字包含以下七种字符: `I, V, X, L,C,D M`
  4. CrossApp 设置App启动页(无任何黑屏白屏,显示完启动画面之间到显示出首页界面)
  5. gibboncode导入.stl格式模型,进行网格划分
  6. 算法快学笔记(十五):贪婪算法与NP完全问题
  7. 分析日志的工具: 日志易
  8. python读取lmdb文件_使用python制作LMDB数据库
  9. 用python制作勒索病毒_python生成的exe被360识别为勒索病毒原因及解决方法
  10. Android Wifi控制方法总结