使用Emscripten库

8
1个回答

15

Emscripten提供的库非常少。这些库是为了让Emscripten C ++代码获得一些操作系统功能(音频、输入、视频)的最小要求。

  • libc:C语言标准库
  • libc++:C++语言标准库
  • SDL:SimpleDirectmediaLayer(SDL 1.X一个开源跨平台项目)
  • GLES2:OpenGL ES 2 API
  • GLFW:GLFW 2.X

例如,将OpenGLES2包含到Emscripten中的标准方法如下:

#include <GLES2/gl2.h>

在包含GLFW时:

#include <GL/glfw.h>

有一些问题,因为如果你想使用更近期的GLFW版本,你是无法这样做的,因为Emscripten只提供了1个库的版本,而且你必须使用它(除非Emscripten更新并升级)。

只有在那些库可以使用上述任意一个或多个库进行编译时,你才能为emscripten编译库。(或者你知道如何封装JavaScript功能并通过C接口公开它们)

同时,在使用Emscripten时,尽量避免只有模板的库,因为它们会产生大量的冗余代码,可能会让可执行文件的大小增加几MB:如果你已经在使用Boost或UBLAS,这将是一个问题。

由于GLFW不是自动链接的库之一,你应该使用以下方式将其链接:

-lglfw

在这里,您可以找到一个使用Emscripten的OpenGL示例项目:

https://github.com/QafooLabs/emscripten-opengl-example

您可以通过打开Makefile文件来检查链接器标志。


3
SDL2也可通过-s USE_SDL=2进行使用。 - PeterT
2
glm可以使用Emscripten编译,因为它是平台无关的(只需将glm源代码添加到您的源代码树中,并提供正确的包含路径和定义正确的GLM配置宏即可编译)。 - CoffeDeveloper
1
在每个使用GLM的地方包含GLM之前,请添加#define GLM_FORCE_PURE。希望创建一个新的头文件,其中包含以下内容:(换行) #define GLM_FORCE_PURE (换行) #include <glm/glm.hpp>。这样就可以直接使用了。使用新的头文件,这样您就不必记住每次都要定义GLM_FORCE_PURE - CoffeDeveloper
由于GLM只是一个头文件,是否没有办法像ammo.js一样创建一个glm.js呢?您该如何将其编译为glm.js呢? - Ryan Bartley
你不需要将GLM编译成JS文件,相反,每个编译到JS文件中的东西都可以包含GLM。 - CoffeDeveloper
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接