Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emscripten编译C+的结果不好+;到JavaScript&;Asm.js_Javascript_C++_Emscripten_Asm.js - Fatal编程技术网

Emscripten编译C+的结果不好+;到JavaScript&;Asm.js

Emscripten编译C+的结果不好+;到JavaScript&;Asm.js,javascript,c++,emscripten,asm.js,Javascript,C++,Emscripten,Asm.js,对于大学的课程,我必须演示asm.js。我找到了一本教程(),这正是我想要的。 所以我创建了给定的C++文件,并用Emscripten编译了它。 结果是一个将近10000行长的文件。找不到“使用asm”语句。与手写JavaScript文件相比,它要慢得多 我正在使用一个可移植的Emscripten SDK包,并在使用之前对其进行了更新 如何让Emscripten生成好的asm代码 更新: 我在没有Emscipten的情况下为我的演示找到了一个不同的解决方案: . 也许有人需要这个。 10k行J

对于大学的课程,我必须演示asm.js。我找到了一本教程(),这正是我想要的。 所以我创建了给定的C++文件,并用Emscripten编译了它。 结果是一个将近10000行长的文件。找不到“使用asm”语句。与手写JavaScript文件相比,它要慢得多

我正在使用一个可移植的Emscripten SDK包,并在使用之前对其进行了更新

如何让Emscripten生成好的asm代码


更新: 我在没有Emscipten的情况下为我的演示找到了一个不同的解决方案: .
也许有人需要这个。 10k行JavaScript非常温和,考虑到它必须包含与系统库(LIBC等)相同的功能,当你执行C++编译的源代码时,它是单独的文件——当浏览器执行JavaScript的沙箱,并且不能访问目标计算机上的系统LIBS时。(由于安全性、操作系统中立性…)例如,只需在一些动态链接的c/c++可执行文件上执行ldd命令,就可以了解这10k行javascript中的大部分内容正在取代什么:

ldd /bin/ls 


linux-vdso.so.1 =>  (0x00007fff8c865000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f7b82854000)
libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f7b8264b000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7b82285000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f7b82018000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7b81e14000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7b82aba000)
libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f7b81c0e000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7b819f0000)
这可能会为您提供有关使用asm.js和emscripten的更多提示:

从我的测试来看,Emscripten似乎只使用asm.js,并在优化级别
-O1
及以上将
“使用asm”
放入生成的Javascript中。因此,在编译时,您需要将
-O1
(或高于
1
的级别)传递给编译器:

eemcc source.cpp -O1 -o target.js`
然后
“使用asm”;
不会被放入生成的Javascript中。

虽然我没有找到让Emscripten设置“使用asm”语句的方法(我手动更改了它),我使用@scott stensland,输出的代码必须是这样的,但问题太简单了,普通js比10k行代码要快。但我不知道,为什么Emscripten不在代码中加入“使用asm”。 eemcc source.cpp -O0 -o target.js`