标签: emscripten

emscripten 未定义的导出函数:

我被困住了,我希望有人可以提供帮助,\n我正在尝试为 webasm 构建 h264lib_opencore 库,并且成功构建了它,我从这个庞大的库及其依赖项中分离出了我需要的功能,并构建了一个 .a通过 emmake make 或在 CLion 中设置工具链,它可以从 emscripten 工具链成功构建静态库 .a。

\n

但是,我不\xe2\x80\x99t 认为函数已正确导出,因此我使用了该-s EXPORTED_FUNCTIONS命令,但不幸的是,即使我已经在我EMSCRIPTEN_KEEPALIVE尝试调用的函数中添加了 a ,但我还是得到了未定义的导出函数。\n并且该函数可以也可以在生成的 .a 文件中看到(通过十六进制编辑器)。\n但是当我执行emcc(或em++)操作时-s EXPORTED_FUNCTIONS,我收到错误 \xe2\x80\x9cundefined 导出函数\xe2\x80\x9d

\n

我在这里还缺少什么?

\n

我使用的命令:

\n
em++ libH264lib_opencore.a -o H264lib_opencore.js -s EXPORTED_FUNCTIONS="['_h264_decoder_process_first_frame']"\n
Run Code Online (Sandbox Code Playgroud)\n

错误

\n
em++: error: undefined exported function: "_h264_decoder_process_first_frame" [-Wundefined] [-Werror]\n
Run Code Online (Sandbox Code Playgroud)\n

如果我打开生成的 .a 库的十六进制编辑器,我可以看到该函数就在那里,尽管名称类似于

\n
_ZN16h264lib_opencore32h264_decoder_process_first_frameEPvS0_iS0_iPiS1_i\n
Run Code Online (Sandbox Code Playgroud)\n

int EMSCRIPTEN_KEEPALIVE h264_decoder_process_first_frame()还在编译之前在源中添加了

\n

我在这里缺少什么?

\n

emscripten webassembly

5
推荐指数
1
解决办法
3139
查看次数

使用 MODULARIZE 选项编译时如何访问 emscripten 的文件系统 API?

emcc如果我使用without编译我的 C++ 代码-s MODULARIZE=1 -s 'EXPORT_NAME="createMyModule"',我可以加载我的 WebAssembly 并访问文件系统 API,如下所示:

HTML:

<script type="text/javascript">
  var Module = {
    onRuntimeInitialized: function() {
      console.log('Module loaded!');
      if (FS.mkdir) {
        console.log('File System API available!');
      }
    }
  };
</script>
<script type="text/javascript" src="myWebAssemblyModule.js"></script>
<script type="module" src="my.js"></script>
Run Code Online (Sandbox Code Playgroud)

日志:

Module loaded!
File System API available!
Run Code Online (Sandbox Code Playgroud)

但是,如果我添加-s MODULARIZE=1 -s 'EXPORT_NAME="createMyModule"'编译器选项,并尝试基于 Promise 访问文件系统 API,则它不起作用:

HTML:

<script type="text/javascript" src="myWebAssemblyModule.js"></script>
<script type="module" src="my.js"></script>
Run Code Online (Sandbox Code Playgroud)

我的.js:

createMyModule().then(MyModule => {
  console.log('Module loaded!');
  if (MyModule.FS.mkdir) {
    console.log('File System API available!');
  } …
Run Code Online (Sandbox Code Playgroud)

javascript emscripten webassembly

5
推荐指数
1
解决办法
974
查看次数

在 Emscripten 中处理 SDL2 大小调整的正确方法

寻找调整来自 Emscripten 的 SDL2 窗口/画布大小的正确方法。目前,我在 JS“resize”事件上添加一个事件侦听器,并将 Canvas 父级的客户端宽度 + 高度发送到 Emscripten,然后更新在每次渲染时调用的宽度和高度变量。

这会产生奇怪的结果 - 比例始终关闭,实际可用的 SDL2 区域没有更改,并且指针事件不再与 SDL 对齐。

我的窗口大小变量是:

int canvasWidth = 800;
int canvasHeight = 600;
Run Code Online (Sandbox Code Playgroud)

这是我的初始化代码:

void Init()
{
    int i;
    for (i = 0; i < 256; i++)
        gPressed[i] = gWasPressed[i] = 0;
    if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE) < 0)
    {
        fprintf(stderr, "Video initialization failed: %s\n", SDL_GetError());
        SDL_Quit();
        exit(0);
    }


    SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
    SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 5);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

    int flags = SDL_WINDOW_OPENGL | …
Run Code Online (Sandbox Code Playgroud)

c++ emscripten sdl-2

5
推荐指数
1
解决办法
2220
查看次数

为什么 WebAssembly 是安全的以及什么是线性内存模型?

(1) 我听说 WebAssembly 通过提供线性内存而安全。我想知道这个线性存储器包含什么?wasm栈和堆是否位于这个内存空间?如果是的话,我认为 wasm 堆栈和粘合代码堆栈(例如 JavaScript、Python 等)是分开的,对吧?

(2)我可以通过使用导入表来了解wasm的内存安全性。换句话说,wasm函数不能调用线性内存之外的任何函数,因为它只能使用索引来调用导入的函数。除此之外,wasm 还提供哪些其他安全功能?可能是上面的堆栈问题。

(3) 看起来wasm中也有控制流完整性。也就是说每个函数的返回地址都是固定的,不能在函数内部修改。这是正确的理解吗?

emscripten asm.js webassembly wasi wasmtime

5
推荐指数
1
解决办法
1666
查看次数

如何使用 webAssembly/emscripten 在 javascript 和 C/C++ 代码之间传递字符串数组?

我正在尝试编写一个 Web 应用程序,它将使用后端 C/C++ 代码进行某种文字处理(例如拼写检查、语法检查、文字分析)。(我有 C/C++ 代码在另一个桌面应用程序中工作......我想将它带到网络上)。我想要一个示例最小代码来执行此操作(将字符串数组从 JavaScript 传递到 c/c++ 代码...c/c++ 代码将执行单词操作...我有这段代码......以及生成的数组字符串将被发送回 JavaScript,在那里它们将被进一步处理。(传入和传出数组很重要)请向我指出任何此类代码/教程,我可以从那里开始。

我搜索了 GitHub。我发现了几个使用 emscripten 的项目,但无法在任何地方找到它。(我唯一能得到一些线索的地方是 Hunspell 用 emscripten 构建......但是我无法成功构建它)

请告诉我 。提前致谢。

javascript c c++ emscripten webassembly

5
推荐指数
1
解决办法
738
查看次数

emscripten 支持哪些最新版本的 OpenGL ES?如何使用它们?

我正在尝试使用一些 ES 3.1 功能,目前尚不清楚是否支持:

我注意到 emscripten 存储库中有一个 OpenGL ES 3.1 标头,它定义了我正在寻找的一些函数,我可以将它们成功地包含在我的项目中。但是,当我尝试链接时它们不可用:

error: undefined symbol: glDispatchCompute (referenced by top-level compiled C/C++ code)
warning: _glDispatchCompute may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
Run Code Online (Sandbox Code Playgroud)

文档说,如果我指定(我正在这样做),支持 OpenGL ES3 。-s FULL_ES3=1

既然有它的标题,那么这个功能可用吗?如果是这样,我如何启用对其的支持?(例如,是否需要手动加载扩展或在 emscripten 中启用实验支持?)

opengl-es webgl emscripten webgl2

5
推荐指数
1
解决办法
2220
查看次数

emscripten:"请求导出但未实现的功能"

有一个函数在R被调用pf,源是在这里.

我正在尝试使用emscripten将此函数转换为JavaScript.我这样调用:

emcc -s EXPORTED_FUNCTIONS="['pf']" nmath/pf.c \
-Ignuwin32/fixed/h/ \
-I/usr/local/Cellar/r/3.1.1/include/ \
-I/usr/local/Cellar/r/3.1.1/R.framework/Versions/3.1/Resources/include/
Run Code Online (Sandbox Code Playgroud)

我收到警告:

WARNING  root: function requested to be exported, but not implemented: "pf"
Run Code Online (Sandbox Code Playgroud)

并且,pf在输出js中没有任何暗示.根据emcc,为什么这个功能"没有实现"?

编辑(根据zakki的答案它应该是_pf,-s EXPORTED_FUNCTIONS="['_pf']"但问题仍然存在):

有关绝对包含路径的事先警告.但是,我假设它可以被忽略?也许它至关重要:

emcc -s EXPORTED_FUNCTIONS="['_pf']" nmath/pf.c -Ignuwin32/fixed/h/ -I/usr/local/Cellar/r/3.1.1/include/ -I/usr/local/Cellar/r/3.1.1/R.framework/Versions/3.1/Resources/include/

WARNING  root: -I or -L of an absolute path "-I/usr/local/Cellar/r/3.1.1/include/" encountered. If this is to a local system header/library, it may cause problems (local system files make sense for compiling natively on your …
Run Code Online (Sandbox Code Playgroud)

javascript c r emscripten

4
推荐指数
1
解决办法
1064
查看次数

将emscripten与opengl着色器一起使用

我无法让emscripten使用openGL着色器.该项目使用emscripten和gcc编译得很好但是当我尝试运行emscripten输出时失败.

我从编译顶点着色器得到的错误:

ERROR: 0:1: 'core' : invalid version directive 
ERROR: 0:3: 'layout' : syntax error 
Run Code Online (Sandbox Code Playgroud)

我从编译片段着色器得到的错误:

ERROR: 0:1: 'core' : invalid version directive 
ERROR: 0:3: 'in' : storage qualifier supported in GLSL ES 3.00 only  
ERROR: 0:3: '' : No precision specified for (float) 
ERROR: 0:5: 'out' : storage qualifier supported in GLSL ES 3.00 only   
ERROR: 0:5: '' : No precision specified for (float) 
Run Code Online (Sandbox Code Playgroud)

我正在使用以下命令编译此项目:

em++ src/*.cpp -Iinclude/ -o test.html -std=c++11 -s USE_GLFW=3 -s FULL_ES3=1
Run Code Online (Sandbox Code Playgroud)

顶点着色器源:

#version 330 core …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glsl emscripten

4
推荐指数
1
解决办法
1474
查看次数

Emscripten malloc和JS和C++之间的免费版

假设我通过Emscripten _malloc(Javascript)在Javascript中分配一些内存M. 我是否允许将M的所有权传递给调用free(C++)的封送C++函数?

javascript c++ emscripten

4
推荐指数
1
解决办法
2251
查看次数

WebAssembly演示指南因丢失文件而失败

按照开发人员指南的步骤,它在MAC上失败了.

http://webassembly.org/getting-started/developers-guide/

我有一个干净的mac安装10.11.6 (15G31),这是日志.


    Mac-MBP:emsdk_portable wasm$ ./emsdk activate clang-incoming-64bit emscripten-incoming-64bit sdk-incoming-64bit
    Writing .emscripten configuration file to user home directory /Users/wasm/
    The Emscripten configuration file /Users/wasm/.emscripten has been rewritten with the following contents:

    import os
    LLVM_ROOT='/Users/wasm/repo/webassembly/emsdk_portable/clang/fastcomp/build_incoming_64/bin'
    NODE_JS='/Users/wasm/repo/webassembly/emsdk_portable/node/4.1.1_64bit/bin/node'
    EMSCRIPTEN_ROOT='/Users/wasm/repo/webassembly/emsdk_portable/emscripten/incoming'
    EMSCRIPTEN_NATIVE_OPTIMIZER='/Users/wasm/repo/webassembly/emsdk_portable/emscripten/incoming_64bit_optimizer/optimizer'
    SPIDERMONKEY_ENGINE = ''
    V8_ENGINE = ''
    TEMP_DIR = '/var/folders/wk/mngy_vmn0xs6j32tm53vvg7m0000gn/T'
    COMPILER_ENGINE = NODE_JS
    JS_ENGINES = [NODE_JS]

    To conveniently access the selected set of tools from the command line, consider adding the following directories to PATH, or call 'source ./emsdk_env.sh' to do …

c++ emscripten webassembly

4
推荐指数
1
解决办法
1106
查看次数

标签 统计

emscripten ×10

c++ ×5

webassembly ×5

javascript ×4

c ×2

asm.js ×1

glsl ×1

opengl ×1

opengl-es ×1

r ×1

sdl-2 ×1

wasi ×1

wasmtime ×1

webgl ×1

webgl2 ×1