问题标签 [emscripten]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 用于 Emscripten 的 C++ 修饰名称
我正在尝试使用 emscripten 将一个简单的 HelloWorld Prgramm 从 C++ 编译为 Javascript。当我包含一个调用例如多功能的主函数时,它工作正常。这是我的代码(HelloWorld.cpp)。
但是,如果我不包含主函数,则 emcc 编译总是会退出
错误根:没有要处理的函数。确保您阻止 LLVM 将它们视为已死(如有必要,请使用 EXPORTED_FUNCTIONS,请参阅常见问题解答)
我知道“EXPORTED_FUNCTIONS”选项,它告诉编译 .js 文件中应该包含哪些函数。我尝试了各种不同的东西:
使用修饰名称,据我了解,名称应该是“_multi_d10HelloWorldd”。我也试过没有类名和其他一些组合。
使用修饰符 EXPORT_ALL
无论我做什么,这些功能都不会包含在最终的 js 文件中。
根据我从EMCC 常见问题解答中了解到的情况,我需要使用 EXPORTED_FUNCTIONS,以便稍后从 JS 调用所需的函数,例如“sayHello”,取消使用相同的方法名称。这正是我以后需要做的。
有人可以指出我可能没有想到的解决方案或任何其他可能的选择吗?
我想到的名字是否正确?
javascript - AssertionError: asm.js 需要 -O1 或以上
我刚刚启动 asm.js 并停留在某一点。我已经安装了 emscripten、clang 和 node js,并且我的 c 程序也使用 emscripten 运行良好,使用以下命令:
./emcc hello_world.c
./emcc hello_world.c -o hello_world.html
但是当我尝试使用 asm 运行此文件时,它会显示此命令的插入错误:
./emcc -01 -s ASM_JS=1 hello_world.c
那么如何解决这个错误呢?
,提前致谢
javascript - Comparing doubles using ULPs (Units in the last place)
I have succeeded in writing an Ulps based function that compares two doubles for equality. According to this page, the comparison can be made using a combination of absolute and relative epsilon or using integers (Ulps).
I have made both epsilon based and Ulps based functions. This is the epsilon based function:
And this is the Ulps based (DoubleToInt64Bits
, subtract
, negate
and lessthan
functions are in the below mentioned JSBIN):
According to Bruce Dawson the Ulps based is preferred. IsAlmostEqual_Ulps
is working ok according to test base of 83 cases, but the function is pretty slow. It takes about 700-900 ms to complete the test base (JSBIN) when executed as a standalone html (outside JSBIN). Epsilon based IsAlmostEqual_Epsilon
takes only about 100 ms.
Is there anything that can be done to speedup IsAlmostEqual_Ulps
function? You can propose also a completely different solution or some fixings to my code.
I have tested already the inlining everything, but it cuts the time only about 5-10%. I'm hunting something like 50-80% improvement in execution time. 100-500% improvement would be fine, but it may be only a dream.
right_answers
in the JSBIN code are got using C# IsAlmostEqual
function (see at the top of JSBIN code). Both above functions give the same results in all 83 cases.
EDIT:
C++ version from here:
c++ - 编译双重比较函数'IsAlmostEqual'时出现Emscripten错误
我是使用 emscripten 的新手,在编译 cpp 文件时遇到错误。
我有 iae.cpp:
我尝试使用 emscripten 编译它:
emcc iae.cpp
但它会产生以下警告和错误:
如何摆脱这些警告和错误,甚至可以IsAlmostEqual()
使用 emscripten 进行编译?
compilation - Emscriptem 无法构建示例,需要 /usr/bin/opt
我使用此处的说明安装了 Emscripten ,与 13.10 有一些不同:
不是编译和设置 clang 3.2,而是从存储库安装的,因为它是 3.2。(clang --version
显示预期输出)
由于编译器没有找到它,所以链接了 llvm:
但是现在我得到一个关于 /usr/bin/opt 不存在的错误,即使 ~/.emscripten 没有提到那个目录:
javascript - 您如何在 emscripten 中迭代 Box2D 中的实体列表?
我从这里使用 Box2D 的 emscripten 端口:https ://github.com/kripken/box2d.js
它工作得很好,但我在与 emscripten 交互时遇到了一些麻烦。
具体来说,我在这样的循环中执行模型显示同步:
...但这似乎不起作用。尽管 C++ 代码在 body 对象的链表末尾返回 NULL,但 body.GetNext()(cpp 中的返回类型为 b2Body *)绝不是原生 javascript null。
我也试过:
然而,这也不是真的。我猜 emscripten 正在返回一个包装的指针,我必须对其进行一些特定的操作来测试“nullness”。
检查返回的对象,我可以看到其中的空值的“指针”值为零,我可以使它与:
因此,显然可以测试 NULL 性,但我找不到任何有关如何执行此操作的文档。
c++ - 简单的 emscripten 循环无法运行
我有以下用于 emscripten 的 C++ 代码:
然后我使用以下命令编译它:
编译运行得很好,但由于某种原因,我没有得到任何输出(所以甚至没有“Hello World!”)。我忽略了一些简单的事情吗?
我的 SDK 版本是 1.8.2
编辑
我让它工作了,似乎出于某种原因, printf 仅在您在其后加上换行符时才有效。
c++ - 使用 emscripten 将位图缓冲区渲染到 HTML5 画布中
我有一个很久以前写的小游戏,它渲染到一个虚拟帧缓冲区。在目标平台上,我将最终缓冲区blit 成位图,并最终渲染帧。这类似于 Wolf3D 和其他老游戏所做的。
有没有办法将我的游戏缓冲区渲染到 HTML5 画布中?我知道 emscripten 使用 SDL,但我不想强制使用 WebGL,因为它是一个简单的 2D 游戏。
javascript - 如何通过 emscripten 在 C++ 和 javascript 之间传递字符串
我正在学习 emscripten,在 C++ 和 JS 之间传递字符串时,我什至无法进行最基本的字符串操作。
例如,我想写一个字符串长度函数。在 C++ 中:
从javascript调用为:
这0
对我来说是有效的。我如何使这项工作按预期进行?我应该在这里使用哪种字符串类型?char const*
? std::wstring
? std::string
? 似乎没有一个工作;我总是得到相当随机的值。
这只是开始......然后我如何从 C++ 中返回一个这样的字符串?
在 JS 中:
再一次,我无法找到一种方法来完成这项工作。我总是在 JS 中得到垃圾。
所以我的问题很清楚:如何通过 Emscripten 在 JS 和 C++ 之间编组字符串类型?
cmake - Compiling clang/LLVM on win results in compile errors - how to fix?
I've stumbled upon problems installing clang/LLVM on my Win 7 64-bit machine for setting up Emscripten in my Visual Studio 2010 Setup. I was following the official howto from Emscripten at https://github.com/kripken/emscripten/wiki/Using-Emscripten-on-Windows and stumbled into problems regarding the needed compilation of clang/LLVM.
svn co http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_32/final llvm
cd llvm\tools
svn co http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_32/final clang
cd ..\\..
mkdir build
cmake -G "Visual Studio 10" ..\llvm
msbuild LLVM.sln /p:Configuration=Release
The result is alot of errors similiar to this one:
CUSTOMBUILD : error : error reading '10.0\VC\bin\llvm\tools\clang\test\Index\ pch-opaque-value.cpp' [c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\b in\build\tools\clang\test\check-clang.vcxproj] CUSTOMBUILD : error : error reading '10.0\VC\bin\llvm\tools\clang\test\Index\ pch-with-errors.m' [c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\ build\tools\clang\test\check-clang.vcxproj]
Obviously, a path starting at '10.0\VC...' is totally invalid.. its missing the 'C:\Program Files (x86)\Microsoft Visual Studio ' in front.. (I've checked there is a file like that in test\Index\ - it is!
My question is: how do I fix that ? a) Can I setup an additional include path that is like 'C:\folder\MS Visual ' (including space) ?
What I have tried so far: a) Doing it from Visual Studio Prompt and normal Prompt. Using default and custom location. b) Running MSBUILD like
msbuild LLVM.sln /p:Configuration=Release /p:"VCBuildAdditionalOptions= C:\Program Files (x86)\Microsoft Visual Studio " c) Trying to change PATH/Systemroot.. Destroyed my systemroot in the meantime for unknown reasons (It complaimed about a wrong path like "C:\Program " and erased it obviously).
I am seriously stuck and dont know any further than these steps. Setting up an include path does not seem to help - though I'm wondering if the CMAKE stuff had problems with space's or what is going on.
Since the authors of Emscripten and probably LLVM call their windows support "experimental", I'm not the only one having troubles trying to set up LLVM/clang for later use with Visual Studio 2010 (not 2012..). I'm sorry for the bad formatting, for some reason SO won't allow me neat formatting today.. I'm using a nightly browser build though.